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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top