2013-03-04 6 views
5
unterbrochen

ich eine etwas lang andauernde jQuery Ajax-Aufruf (etwa 5 Sekunden) Angenommen, haben wie folgt:Wie kann man sagen, wenn JQuery Fehler bedeutet Anruf

$.ajax({ 
    url: '/LongCall', 
    type: 'POST', 
    async: true, 
    cache: false, 
    datatype: 'json', 
    success: function(data) { 
     alert('Success!'); 
    }, 
    error(xhr, textStatus, errorThrown) { 
     alert('Error!'); 
    } 
}); 

Nehmen wir nun an während des Wartens auf meine fünf zweiten Prozess zu laufen Der Benutzer wird ungeduldig und entscheidet sich für eine Art Navigation auf meiner Seite. In dem obigen Aufruf wird der Benutzer die Fehlermeldung erhalten, wenn er auf einen Link klickt.

Ich möchte die Fehlermeldung anzeigen, wenn es wirklich einen Fehler gibt, aber wenn alles passiert ist, dass der Benutzer entschieden hat, weg zu navigieren, möchte ich nicht, dass die Fehlermeldung angezeigt wird. Wie kann ich das machen?

Mit anderen Worten, gibt es einen Wert, den ich überprüfen kann (xhr.status vielleicht?), Der mir sagen wird, dass der Fehler einfach auftrat, dass der Prozess unterbrochen wurde, damit ich den Fehler ignorieren kann?

Danke!

+1

Überprüfen Sie das 2. und 3. Argument des Fehlerrückrufs. –

+0

Zweites Argument ist "Fehler". Das dritte Argument ist "". Weder ist in diesem Fall nützlich von dem, was ich sagen kann. –

+0

In diesem Fall sehen Sie sich die Eigenschaften des ersten Arguments an. –

Antwort

8

So nahe, wie ich sagen kann, ist der beste Weg, dies zu tun, ist xhr.readyState zu überprüfen in Ihrem Fehlerbehandler. Jeder Wert kleiner als 4 zeigt an, dass der Prozess noch läuft, was bedeutet, dass etwas im Browser passiert, um ihn zu unterbrechen.

Sie möchten auch xhr.abort() aufrufen, um zu versuchen, den AJAX-Prozess zu stoppen, damit der Benutzer nicht warten muss, bis er fertig ist, bevor die Navigation tatsächlich stattfindet, obwohl für mich der Aufruf von xhr.abort () beschleunigt die Dinge nicht wirklich.

$.ajax({ 
    url: '/LongCall', 
    type: 'POST', 
    async: true, 
    cache: false, 
    datatype: 'json', 
    success: function(data) { 
     alert('Success!'); 
    }, 
    error(xhr, textStatus, errorThrown) { 
     if (xhr.readyState < 4) { 
      xhr.abort(); 
     } 
     else { 
      alert('Error!'); 
     } 
    } 
}); 
3

die documentation Lesen, würde ich ahne, dass Ihre Fehlerhandler so sein sollte:

error(xhr, textStatus, errorThrown) { 
    if(textStatus != "abort") { 
     alert("Error!"); 
    } 
} 
+0

Das dachte ich mir auch, aber wenn ich den Status begutachte, ist es "Fehler" wenn der Fehler eine Unterbrechung ist. –

+0

Was sagt 'errorThrown'? –

+0

Siehe oben. Es ist eine leere Zeichenfolge. –

Verwandte Themen