2010-06-16 2 views
5

Wenn ich meinen Server herunterbringe und eine Ajax-Anfrage an ihn mache, zeigt Firebug, dass die Anfrage einige Sekunden nach der Anfrage abgebrochen wird, und mein success Handler wird aufgerufen.

Warum wird der Erfolgshandler aufgerufen, sollte es nicht der Fehlerbehandler sein? Und wie kann ich zuverlässig erkennen, dass es kein Erfolg war?

Code:

  $.ajax({ 
       url: url, 
       type: "POST", 
       data: data, 
       dataType: "json", 
       success:function(data, statusText, xhr){ 
        //gets called on success, or even when server is down. 
       }, 
       error: function(){ 
        //called if server returns error, but not if it doesn't respond 
       } 
      }); 

UPDATE: dieses Verhalten nur auf localhost ist, geschieht es, wenn meine Entwicklung Server ausschalten. Ich habe getestet, was passiert, wenn ich versuche, den Produktionsserver zu erreichen, aber mein persönliches Internet offline geschaltet habe, und es hängt einfach, ohne Erfolg oder Fehler aufzurufen. Ich denke, ich sollte die Timeout-Eigenschaft für diesen Fall festlegen.

+1

nicht positiv, aber vielleicht die Antwort von 'abort' ist anders als' fail'? Kannst du deinen Code posten? – hookedonwinter

+0

Möglicherweise verwandt: http://stackoverflow.com/questions/2357147/ajax-how-to-prevent-jquery-from-calling-the-success-event-after-executing-xmlhtt –

+1

Wie nehmen Sie den Server herunter? Ist es völlig unerreichbar oder wird es 404 Seiten bedienen? –

Antwort

3

Ich denke, das ist ein Bug (?) In der Version 1.4.2 von jQuery.

Ich zitiere einen Kommentar aus dem jQuery documentation:

In 1.4.2 jquery nicht ajax Fehler-Callback Fehler, dies bei Timeout/Verbindung zu beheben ruft: Entfernen Sie die Hinter "|| xhr .status === 0" von httpSuccess Funktion

Sie sich, dass, wenn Sie die jQuery-Code selbst modifizieren wollen. Sonst können Sie es in Ihrem Erfolg Rückruf überprüfen, wie ich hier machen:

$.ajax({ 
    type: "POST", 
    url: "http://madeUpServerthatdoesnotExist.com/index.php", 
    data: "id=1", 
    success: function(msg){ 
    if(this.xhr().status === 0){ 
      errorHandler(); 
    } 
    else { 
      alert('Success'); 
    } 
    }, 
    error: errorHandler 
}); 

function errorHandler(){ 
      alert('Freakin error'); 
} 

Es scheint schwierig zu sein, bitte kommentieren, wenn Sie über eine bessere Art und Weise kennen!

EDIT: Nach der Untersuchung, ich bin nicht sicher, dass dies einen Fehler in jQuery sein könnte, wird die Antwort aktualisieren, sobald ich einen Anhaltspunkt erhalten

+0

das scheint zu funktionieren – Kyle

Verwandte Themen