Ajax verzoeken afbreken met jQuery

Met behulp van jQuery, hoe kan ik annuleren / afbreken van een Ajax-verzoek dat ik nog niet heb ontvangen het antwoord van?

Oplossing

De meeste jQuery Ajax methods retourneren een XMLHttpRequest (of het equivalent) object, dus je kunt gewoon abort() gebruiken.

Zie de documentatie:

  • abort Method (MSDN). Annuleert het huidige HTTP verzoek.
  • abort() (MDN). Als het verzoek al is verzonden, zal deze methode het verzoek afbreken.
var xhr = $.ajax({
    type: "POST",
    url: "some.php",
    data: "name=John&location=Boston",
    success: function(msg){
       alert( "Data Saved: " + msg );
    }
});

//kill the request
xhr.abort()

UPDATE: Vanaf jQuery 1.5 is het geretourneerde object een wrapper voor het native XMLHttpRequest object genaamd jqXHR. Dit object lijkt alle native eigenschappen en methoden te bevatten, zodat het bovenstaande voorbeeld nog steeds werkt. Zie Het jqXHR Object (jQuery API documentatie).

UPDATE 2: Vanaf jQuery 3, de ajax methode retourneert nu een belofte met extra methoden (zoals abort), zodat de bovenstaande code nog steeds werkt, hoewel het object wordt geretourneerd is niet een xhr niet meer. Zie de 3.0 blog hier.

UPDATE 3: xhr.abort() werkt nog steeds op jQuery 3.x. Ga er niet vanuit dat de update 2 correct is. Meer info op jQuery Github repository.

Commentaren (15)

Je kunt het verzoek niet terugroepen, maar je kunt wel een time-out waarde instellen waarna het antwoord genegeerd wordt. Zie deze pagina voor jquery AJAX opties. Ik denk dat je error callback aangeroepen zal worden als de timeout periode overschreden wordt. Er is al een standaard timeout op elk AJAX verzoek.

Je kunt ook de abort() methode op het request object gebruiken maar, terwijl het de client zal doen stoppen met luisteren naar het event, zal het may waarschijnlijk de server niet stoppen met het verwerken ervan.

Commentaren (0)

Het is een asynchroon verzoek, wat betekent dat zodra het verzonden is, het daarbuiten is.

In het geval dat je server een zeer dure operatie start als gevolg van het AJAX verzoek, is het beste wat je kunt doen je server openen om te luisteren voor cancel verzoeken, en een apart AJAX verzoek sturen om de server te laten stoppen met wat hij ook aan het doen is's.

Anders, negeer gewoon het AJAX antwoord.

Commentaren (8)