Ist es möglich, dass mit jQuery, ich eine Ajax-Anfrage abbrechen/verhindern von dem ich noch keine Antwort erhalten habe?
Antworten
Zu viele Anzeigen?Ich habe eine Lösung für die Live-Suche entwickelt und musste ausstehende Anfragen stornieren, die möglicherweise länger als die letzte/aktuelle Anfrage gedauert haben.
In meinem Fall habe ich etwas Ähnliches verwendet:
//On document ready
var ajax_inprocess = false;
$(document).ajaxStart(function() {
ajax_inprocess = true;
});
$(document).ajaxStop(function() {
ajax_inprocess = false;
});
//Snippet from live search function
if (ajax_inprocess == true)
{
request.abort();
}
//Call for new request
Es gibt keine verlässliche Möglichkeit, dies zu tun, und ich würde es nicht einmal versuchen, sobald die Anfrage auf dem Weg ist; die nur eine vernünftige Reaktion ist ignorieren. die Antwort.
in den meisten Fällen kann es in Situationen wie passieren: ein Benutzer klickt zu oft auf eine Schaltfläche, die viele aufeinanderfolgende XHR auslöst, hier haben Sie viele Möglichkeiten, entweder blockieren die Schaltfläche, bis XHR zurückgegeben wird, oder nicht einmal neue XHR auslösen, während eine andere läuft, die den Benutzer darauf hinweist, sich zurückzulehnen - oder verwerfen alle ausstehenden XHR-Antworten außer der letzten.
Der folgende Code zeigt sowohl das Starten als auch das Abbrechen einer Ajax-Anfrage:
function libAjax(){
var req;
function start(){
req = $.ajax({
url: '1.php',
success: function(data){
console.log(data)
}
});
}
function stop(){
req.abort();
}
return {start:start,stop:stop}
}
var obj = libAjax();
$(".go").click(function(){
obj.start();
})
$(".stop").click(function(){
obj.stop();
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="button" class="go" value="GO!" >
<input type="button" class="stop" value="STOP!" >