Abortar ajax pedidos antes de enviar próximo? (JQuery)
-
05-07-2019 - |
Pergunta
Eu tenho um relatório em nosso sistema interno que pode retornar em qualquer lugar a partir de 1 dias dados para um anos completos. Devido a isso, o relatório pode levar 0,5 segundos ou mais de 45 segundos para gerar tudo.
O relatório permite que você modifique um monte de filtros, todos que quando modificado, o fogo fora uma solicitação ajax muito simples:
var ax = $.ajax({
type: "GET",
url: "/blah",
data: values,
success: function(data) { .. }
});
Agora, o problema surge quando os nossos estados de usuário maravilhosas "Oh, espere! Eu quero que isso seja a partir de fevereiro, e não janeiro!". Mas, um pedido já está acontecendo desde janeiro é um monte de dados! Assim, o usuário muda a opção de data de fevereiro e eu posso ver o console Javascript envio de um segundo pedido. Agora temos dois vão e é uma corrida !
/ report /? Start_date = Janeiro (Ainda carregando ...)
/ report /? Start_date = fevereiro (Hey, eu estou aqui agora também!)
Então, geralmente a uma menor irá carregar mais cedo, mas então o outro cargas e que sobre-escreve o que eles já tinha .. hmm:)
Eu tentei usar ax.abort()
colocado após a declaração da variável ax
como mencionado aqui mas não parece estar funcionando.
Então agora eu pergunto, o que eu estou ausente? Eu só quero matar o pedido atual (do lado do cliente, eu sei que não posso fazer nada sobre isso no lado do servidor), logo que o usuário alterar algumas opções para que eu não tenho 2 ou mais solicitações indo ao mesmo tempo . Definir async: false
não é uma opção, uma vez que apenas bloqueia a saída do usuário.
Agradecemos antecipadamente a sua ajuda.
Solução
Você pode dar uma olhada na ajaxmanager plugin.
Outras dicas
Eu acho que a tentativa de abortar pedido anterior não é uma boa solução. Talvez você deve usar solução simples - para cada solicitação aumento contador de ajax em javascript, e passá-lo para o retorno de chamada ajax. Quando o retorno de chamada ocorre verificação se o contador da resposta é o mesmo que o valor do contador atual. Se não, então ignorar a resposta -. Foi disparado por evento clique ultrapassada