Ich habe kürzlich festgestellt, dass es zwei Probleme gibt, wenn Benutzer häufig auf Ajax-Anfragen klicken:
1. Wenn Sie 5 Ajax-Anfragen hintereinander anklicken, sind die ersten 4 tatsächlich ungültig, um Ressourcen zu sparen.
2. Das schwerwiegendere Problem ist: Die Antwort auf die zuletzt gesendete Anfrage ist möglicherweise nicht die letzte, was zu Verwirrung führen kann. Außerdem wird eine Warteschlange benötigt, um gesendete Anfragen und Antworten zu verwalten.
Ich habe tatsächlich die Implementierung der Warteschlange entworfen und später festgestellt, dass jQuery die Abbruchmethode direkt verwendet, sodass eine so komplizierte Implementierung nicht erforderlich ist. Schließlich warten noch andere Dinge darauf, abgeschlossen zu werden.
Es ist wirklich praktisch, Jquery zum Senden von Ajax-Anfragen, $.get, $.post, $.ajax usw. zu verwenden, aber manchmal müssen wir die Ajax-Anfrage mittendrin beenden.
Wenn Sie beispielsweise Comet zum Chatten verwenden, aktualisiert der Server nach dem Senden einer Anfrage normalerweise den Link und gibt nach Dutzenden von Sekunden Daten zurück. Angenommen, der Server aktualisiert den Link alle 30 Sekunden. Was wäre, wenn wir die Ajax-Anfrage nach 10 Sekunden stoppen möchten?
Beginnen wir mit dem Code und erklären ihn später
var ajaxGet = $.get(“comet_server.php”,{id:1},function(data){ ….//一些操作 }); ajaxGet.abort();
Der obige Code besteht aus zwei Wissenspunkten:
1. Der von $.get zurückgegebene Datentyp ist XMLHttpRequest, siehe Handbuch. (Gleiches gilt für $.post, $.ajax, $.getJSON, $.getScript)
2. Das XMLHttpRequest-Objekt verfügt über die abort()-Methode
Hinweis: Nach abort() stoppt die Ajax-Anfrage sofort, die nachfolgende Funktion() wird jedoch weiterhin ausgeführt. Wenn Sie die Ausführung der Operationen vermeiden möchten, können Sie am Anfang von function()
eine Beurteilung hinzufügenvar ajaxGet = $.get(“comet_server.php”,{id:1},function(data){ if(data.length == 0) return true; ….//一些操作 }); ajaxGet.abort();
Ajax-Anfrage beenden:
var request = $.get(“ajax.aspx”,{id:1},function(data){ //do something }); //终止请求动作. request.abort();
Doppelte Anfragen verhindern:
var request; if(request != null) request.abort(); request = $.get(“ajax.aspx”,{id:1},function(){ //do something }); ajax & setTimeout实现 secondTry 在等待一秒之后将firstTry的ajax终止: var firstTry = $.ajax( //do something ); var secondTry = setTimeout(function(){alert(‘ok');firstTry.abort()},1000);