2010-09-12 7 views
5

Ich habe die folgende JS-Funktion durch eine Taste ausgelöst:JavaScript: ajaxSubmit Fehler

function uploadPicture() { 
    $("form#pictureUpload").ajaxSubmit({ 
     data: $("form#pictureform").serialize(), 
     type: 'post', 
     url: '?action=loadpicture', 
     success: function(response) { 
      $('#div-pictures').html(response); 
     } 
    }); 

}

Das funktionierte perfekt für mehrere Monate in Ordnung. Aber es funktioniert heute nicht mehr in Firefox, Safari, Chrome und Opera - obwohl es im Internet Explorer immer noch funktioniert.

Safari gibt mir die folgenden mysteriösen Fehler:

Failed to load resource: cancelled  ?action=loadpicture 

Chrome gibt fast das gleiche (ohne : cancelled). Opera und Firefox zeigen überhaupt keinen Fehler. Die einzige zusätzliche Information ist, dass die obigen Fehler auftreten, nachdem der Dateiupload beendet ist und obwohl der Server eine HTML-Ausgabe als Rückmeldung generiert, die von den Browsern ignoriert wird.

Bitte lassen Sie mich wissen, wenn Sie eine Idee haben, wie Sie das beheben können. Ich bin stundenlang im Kreis gelaufen, ohne auch nur annähernd eine Lösung zu finden - ich sehe einfach keine Fehler im Code oder in den Protokolldateien. Danke vielmals!

+0

Ich weiß nicht die Antwort, aber ein paar Ideen zu untersuchen: -Ich glaube nicht, es ist richtig zu spezifizieren? Parm = Wert bei einer POST-Anfrage. Wenn Sie eine GET-Anforderung ausführen, werden normalerweise alle Parameter, die Sie angeben, auf diese Weise an die URL angehängt. Beim POST werden die Werte wie Formulardaten gesendet. Versuchen Sie es mit einer versteckten Eingabe. Ich könnte mich irren, vielleicht ist es erlaubt, obwohl es nicht normal ist. - Es sieht so aus, als ob Sie auf derselben Seite posten, wo dieser Code definiert ist, nicht sicher, ob das richtige Verhalten ist oder nicht? - Verwenden Sie eine andere Version von jQuery als zuvor? – RMorrisey

+0

Keine jQuery-Version ist gleich. Der einzige Unterschied, den ich kenne, ist ein kleines Update von Apache und Mod-Php. – MrG

+0

Funktioniert '? Action = loadpicture' wie zuvor? Haben Sie versucht, diese URL synchron aufzurufen? – dmitko

Antwort

5

Ich brauchte eine Weile, aber ich endlich herausgefunden. Einer unserer Administratoren die Konfiguration von Apache hinzugefügt:

, die ein Problem bei bestimmten Browser verursacht, weil der iframe Verwendung bei http://jquery.malsup.com/form/#file-upload beschrieben. Nachdem es die folgenden alles ändert funktioniert wieder (keine Code-Änderungen!):

Header append X-FRAME-OPTIONS "SAMEORIGIN" 

die Fehlermeldung auf Safari & Chrome kryptisch sind jedenfalls. Das seltsame Verhalten ohne Fehlermeldung auf dem anderen Browser ist noch schlimmer.

+1

Achten Sie darauf, dies zu akzeptieren, wenn Sie können, sollte jemand anderes später Kopfschmerzen speichern :) –

0

Hmmm Sie sollten nicht die Query-String in der URL verwenden, denn wenn man serialisiert rufen wiederum in Gang zu bringen, die Daten in einer Abfrage aufgereiht versuchen Sie dies:

$("form#pictureUpload").ajaxSubmit({ 
     data: 'action=loadpicture&'+$("form#pictureform").formSerialize(), 
     type: 'post', 
     success: function(response) { 
      $('#div-pictures').html(response); 
     } 
    });