Usando jQuery, como posso cancelar/abortar um pedido Ajax do qual ainda não recebi a resposta?
A maioria dos métodos jQuery Ajax retornam um objeto XMLHttpRequest (ou o equivalente), então você pode simplesmente utilizar abort()
.
Veja a documentação:
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: A partir de jQuery 1.5 o objeto retornado é um wrapper para o objeto nativo XMLHttpRequest chamado jqXHR. Este objeto parece expor todas as propriedades e métodos nativos para que o exemplo acima ainda funcione. Veja O objeto jqXHR (documentação da API jQuery).
UPDATE 2:
A partir de jQuery 3, o método ajax agora retorna uma promessa com métodos extras (como abortar), então o código acima ainda funciona, embora o objeto sendo retornado não seja mais um xhr
. Veja o blog 3.0 aqui.
**UPDATE 3**: xhr.abort()
ainda funciona em jQuery 3.x. Não assuma que a actualização 2* está correta. Mais informações sobre o repositório jQuery Github.
Você não pode se lembrar do pedido, mas pode definir um valor de timeout após o qual a resposta será ignorada. Veja esta página para opções de jquery AJAX. Acredito que a sua chamada de retorno de erro será chamada se o período de timeout for excedido. Já existe um timeout padrão em cada solicitação AJAX.
Você também pode usar o método abort() no objeto de requisição mas, enquanto isso fará com que o cliente pare de ouvir o evento, ele may provavelmente não irá parar o servidor de processá-lo.
É um pedido assíncrono, ou seja, uma vez que é enviado, está lá fora.
Caso seu servidor esteja iniciando uma operação muito cara devido ao pedido AJAX, o melhor que você pode fazer é abrir seu servidor para ouvir pedidos de cancelamento, e enviar um pedido AJAX separado notificando o servidor para parar o que quer que ele esteja fazendo.
Caso contrário, simplesmente ignore a resposta do AJAX.