2010-12-10 13 views
2

Ich habe folgende jQuery Ajax-Aufruf (Es gibt keine anderen globalen Einstellungen/Handler):Warum ruft jQuery meinen Ajax-Fehlerhandler nicht auf?

$.ajax({ 
    url: "http://www.blah.com/url/does/not/exist", 
    type: "get", 
    data: someData, 
    dataType: "json", 
    error: function (xhr, msg, ex) 
    { 
     alert("Failed: " + msg); 
    }, 
    complete: function (xhr, msg) 
    { 
     alert("Done: " + msg); 
    } 

Ich würde meine Fehler-Handler erwarten aufgerufen werden, sondern die complete Ereignis ausgelöst wird und die Warnung angezeigt Done: success. In meinem Javascript-Konsole sehe ich die folgende Meldung:

XMLHttpRequest cannot load http://www.blah.com/url/does/not/exist. 
Origin null is not allowed by Access-Control-Allow-Origin. 
  1. Warum wird mein Fehler-Handler nicht aufgerufen?
  2. Was bedeutet die Origin Nachricht, die auf der Konsole protokolliert wird?

Dank!

Antwort

2

Sieht aus wie der einzige Weg, um die Server-Antwort in meiner success Methode zu erhalten ist und speichern sie in einer globalen Variablen, die ich Ich werde den Handler für complete einchecken (der immer angerufen wird). Keine Antwort bedeutet, dass die Anfrage fehlgeschlagen ist.

Es ist eine schäbige Art, Fehler in dieser ansonsten ausgezeichneten Bibliothek zu behandeln.

1

Ihr Fehlerhandler wird nicht aufgerufen, da die AJAX-Anforderung nicht einmal ausgeführt wird: Der Browser verweigert dies aufgrund der same origin policy: Die angeforderten Daten stammen von einer anderen Site als der, die Ihre Site bedient Seite.

Sie können versuchen, den JSONP Datentyp, um das Problem zu umgehen:

$.ajax({ 
    url: "http://www.blah.com/url/does/not/exist", 
    type: "get", 
    data: someData, 
    dataType: "jsonp", 
    error: function(xhr, msg, ex) { 
     alert("Failed: " + msg); 
    }, 
    complete: function(xhr, msg) { 
     alert("Done: " + msg); 
    } 
}); 
+0

Ich habe zu früh gejubelt ... Jetzt wird weder 'Erfolg' noch 'Fehler' aufgerufen, und die Konsole zeigt an: 'Fehler beim Laden der Ressource '- irgendwelche Ideen? –

+0

Nun, 'Fehler beim Laden der Ressource 'ist Ihr' 404' Fehler. Das bedeutet, dass der Fehlerhandler nur aufgerufen wird, wenn der Webserver die Anfrage tatsächlich bearbeitet. Mit anderen Worten, es wird nur für "5xx" -Fehler und nicht für 4xx-Fehler aufgerufen, daher wird es nicht aufgerufen, wenn die Seite nicht existiert. –

+1

Ok, danke. Ich frage mich, was ist der Sinn eines Fehler Handlers, wenn es nicht alle Fehler abfängt? Der wahrscheinlichste Fehler, den ich behandeln muss, ist ein Netzwerkproblem (keine Verbindung), das ein 404 ... –

Verwandte Themen