2003 Stimmen

Abbruch von Ajax-Anfragen mit jQuery

Ist es möglich, dass mit jQuery, ich eine Ajax-Anfrage abbrechen/verhindern von dem ich noch keine Antwort erhalten habe?

14voto

Billy Punkte 141

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

12voto

Joecoder001 Punkte 289

Verwenden Sie einfach ajax.abort(), um zum Beispiel eine anstehende Ajax-Anfrage abzubrechen, bevor eine weitere gesendet wird.

//check for existing ajax request
if(ajax){ 
 ajax.abort();
 }
//then you make another ajax request
$.ajax(
 //your code here
  );

10voto

comeGetSome Punkte 1883

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.

8voto

zloctb Punkte 9390

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!" >

6voto

vikyd Punkte 1391

Wenn xhr.abort(); führt zum Neuladen der Seite,

Dann können Sie die onreadystatechange vor dem Abbruch zu verhindern:

//  prevent page reload by abort()
xhr.onreadystatechange = null;
//  may cause page reload
xhr.abort();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X