Ako môžem pomocou jQuery zrušiť/prerušiť požiadavku Ajax, na ktorú som ešte nedostal odpoveď?
Väčšina metód jQuery Ajax vracia objekt XMLHttpRequest (alebo jeho ekvivalent), takže stačí použiť abort()
.
Pozri dokumentáciu:
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: Od verzie jQuery 1.5 je vrátený objekt obalom pre natívny objekt XMLHttpRequest s názvom jqXHR. Zdá sa, že tento objekt zobrazuje všetky natívne vlastnosti a metódy, takže vyššie uvedený príklad stále funguje. Pozri Objekt jqXHR (dokumentácia jQuery API).
DOPLNENIE 2:
Od verzie jQuery 3 metóda ajax teraz vracia sľub s ďalšími metódami (napríklad abort), takže vyššie uvedený kód stále funguje, hoci vrátený objekt už nie je xhr
. Pozri blog 3.0 tu.
DOPLNENIE 3: xhr.abort()
stále funguje na jQuery 3.x. Nepredpokladajte, že aktualizácia 2 je správna. [Viac informácií na repozitári jQuery Github] [https://github.com/jquery/jquery/issues/2084#issuecomment-308173243].
Požiadavku nemôžete odvolať, ale môžete nastaviť hodnotu časového limitu, po ktorej bude odpoveď ignorovaná. Možnosti jquery AJAX nájdete na tejto stránke. Domnievam sa, že vaše spätné volanie chyby sa zavolá, ak sa prekročí časový limit. Pri každej požiadavke AJAX už existuje predvolený časový limit.
Môžete tiež použiť metódu abort() na objekte požiadavky, ale hoci to spôsobí, že klient prestane počúvať udalosť, pravdepodobne to may nezastaví server pred jej spracovaním.
Je to asynchrónna požiadavka, čo znamená, že keď sa raz odošle, je vonku.
V prípade, že váš server začína veľmi nákladnú operáciu kvôli požiadavke AJAX, najlepšie, čo môžete urobiť, je otvoriť server na počúvanie požiadaviek na zrušenie a poslať samostatnú požiadavku AJAX, ktorá oznámi serveru, aby zastavil to, čo robí.
V opačnom prípade jednoducho ignorujte odpoveď AJAX.