2012-09-04 2 views
6

Ich versuche SWFUpload, um ein Bild auf meinem Server, zusammen mit anderen Postdaten, die mit dem Bild kommen müssen, ordnungsgemäß hochladen. Es gibt ein Formular zum Ausfüllen der Daten. Wenn der Benutzer auf die Schaltfläche Durchsuchen klickt und seine Bilddatei auswählt, wird das Bild nicht sofort hochgeladen. Es wird in der Warteschlange gehalten, bis der Benutzer auf eine Senden-Schaltfläche klickt, dann rufe ich mySwfUploadInstance.startUpload() auf, damit der Upload gestartet wird.SWFUpload startUpload() schlägt fehl, wenn nicht innerhalb der Datei dialog_complete_handler aufgerufen

Aber es scheitert kläglich an der Linie 452 von swfupload.js in der Funktion 'callFlash':

Uncaught Call to ReturnUploadStart failed

Die Ausnahme vor dem Wurf diese Fehler erwischt zu werden ist folgende:

Object #<HTMLObjectElement> has no method 'CallFunction'

in der folgenden Funktion:

SWFUpload.prototype.callFlash = function (functionName, argumentArray) { 
    argumentArray = argumentArray || []; 

    var movieElement = this.getMovieElement(); 
    var returnValue, returnString; 

    // Flash's method if calling ExternalInterface methods (code adapted from MooTools). 
    try { 
     returnString = movieElement.CallFunction('<invoke name="' + functionName + '" returntype="javascript">' + __flash__argumentsToXML(argumentArray, 0) + '</invoke>'); 
     returnValue = eval(returnString); 
    } catch (ex) { 
     throw "Call to " + functionName + " failed"; 
    } 

    // Unescape file post param values 
    if (returnValue != undefined && typeof returnValue.post === "object") { 
     returnValue = this.unescapeFilePostParams(returnValue); 
    } 

    return returnValue; 
}; 

movieElement scheint ein gültiges Flash-Objekt zu sein.

ich nicht, dass die Fehlermeldung erhalten, wenn ich startUpload() aufrufen, innerhalb der Funktion I file_dialog_complete_handler passieren, wenn SWFUpload Initialisierung:

function ImageFileDialogComplete(numFilesSelected, numFilesQueued) 
{ 
    try 
    { 
     this.startUpload(); 
    } 
    catch (ex) 
    { 
     this.debug(ex); 
    } 
} 

Ich muss wirklich in der Lage sein, um den Upload zu verschieben, wenn der Benutzer schließt die Formular und klicken Sie auf den Senden-Button.

Irgendeine Idee, was mit SWFUPload falsch ist, wenn ich startUpload() aus dem vollständigen Dialoghandler herausrufe?

Antwort

14

Es scheint, das Problem war, weil ich das div, das das Blitzobjekt enthielt, versteckte, indem ich Anzeige stellte: keine auf ihm, kurz vor dem Aufrufen von startUpload(). Ich tat dies, um das Formular zu verbergen und stattdessen ein div mit einem Fortschrittsbalken anzuzeigen.

Aus irgendeinem Grund muss das Flash-Objekt auf dem Bildschirm sichtbar bleiben, sonst würden alle Anrufe fehlschlagen.

+3

Vielen Dank für das Posten dieser Antwort - Sie haben mir viele Stunden Debugging erspart – Jeremy

+0

Haben Sie eine bessere Lösung? Ich muss den Container nach dem Hochladen verstecken. – Teddy

+0

Ich habe eine bessere Lösung, anstatt Container zu verbergen, ich Container Breite und Höhe auf 1px und Display-Block. – Teddy

Verwandte Themen