Eu tenho um problema, ao enviar um formulário, todas as solicitações de ajax ativas falham e isso dispara um evento de erro.
Como parar todas as solicitações de ajax ativas no jQuery sem evento de erro de trigerring?
Toda vez que você cria uma solicitação ajax, pode usar uma variável para armazená-la:
var request = $.ajax({
type: 'POST',
url: 'someurl',
success: function(result){}
});
Então você pode abortar a solicitação:
request.abort();
Você pode usar uma matriz para acompanhar todas as solicitações de ajax pendentes e abortá-las, se necessário.
O fragmento a seguir permite manter uma lista ( pool ) de solicitações e interromper todas, se necessário. É melhor colocar no
<HEAD>
html antes que outras chamadas AJAX sejam feitas.fonte
Object doesn't support property or method 'indexOf'
? Eu suspeito que pode ser stackoverflow.com/a/2608601/181971 ou talvez simplesmente trocar para stackoverflow.com/a/2608618/181971 ?O uso do ajaxSetup não está correto , conforme observado em sua página de documento. Ele apenas configura os padrões e, se alguns pedidos os substituírem, haverá uma bagunça.
Estou muito atrasado para a festa, mas apenas para referência futura, se alguém estiver procurando uma solução para o mesmo problema, aqui está minha chance, inspirado e amplamente idêntico às respostas anteriores, mas mais completo
fonte
Aqui está o que estou usando atualmente para fazer isso.
Nota: _.each de underscore.js está presente, mas obviamente não é necessário. Sou apenas preguiçoso e não quero alterá-lo para $ .each (). 8P
fonte
aboutAll
deve remover os elementos da matriz. Além disso, quando uma solicitação é concluída, ela deve se remover da lista.Dê a cada solicitação xhr um ID exclusivo e armazene a referência do objeto em um objeto antes de enviá-lo. Exclua a referência depois que uma solicitação xhr for concluída.
Para cancelar todas as solicitações a qualquer momento:
Retorna os IDs exclusivos da solicitação cancelada. Apenas para fins de teste.
Função de trabalho:
Retorna um objeto com função única que pode ser usada para adicionar mais funcionalidades quando necessário.
fonte
Achei muito fácil para várias solicitações.
Etapa 1: defina uma variável no topo da página:
step2: configure beforeSend em todas as solicitações de ajax:
step3: use-o sempre que necessário:
fonte
Estendi a resposta mkmurray e SpYk3HH acima para que xhrPool.abortAll possa interromper todas as solicitações pendentes de um determinado URL :
O uso é o mesmo, exceto que abortAll agora pode aceitar opcionalmente um URL como parâmetro e cancelará apenas as chamadas pendentes para esse URL
fonte
Eu tive alguns problemas com o código de Andy, mas isso me deu ótimas idéias. O primeiro problema foi que devemos remover quaisquer objetos jqXHR que foram concluídos com êxito. Eu também tive que modificar a função abortAll. Aqui está o meu código de trabalho final:
Não gostei da maneira ajaxComplete () de fazer as coisas. Não importa como eu tentei configurar o .ajaxSetup, ele não funcionou.
fonte
Atualizei o código para que ele funcione para mim
fonte
Jogando meu chapéu. Ofertas
abort
eremove
métodos contra axhrPool
matriz e não é propenso a problemas comajaxSetup
substituições.fonte
Faça um pool de todas as solicitações de ajax e aborte-as ...
fonte
Melhor usar código independente .....
fonte
Tão importante quanto: digamos que você deseja fazer logoff e está gerando novas solicitações com temporizadores: porque os dados da sessão são renovados a cada nova inicialização (talvez você possa dizer que estou falando do Drupal, mas esse pode ser qualquer site que utilize sessões) .. Eu tive que passar por todos os meus scripts com uma pesquisa e substituição, porque eu tinha uma tonelada de coisas sendo executadas em diferentes casos: variáveis globais no topo:
fonte
sempre que você quiser abortar toda a solicitação ajax, basta ligar para esta linha
fonte
Existe uma solução fictícia que eu a uso para abortar todas as solicitações de ajax. Esta solução é recarregar a página inteira. Essa solução é boa se você não gosta de atribuir um ID a cada solicitação ajax e se faz solicitações ajax dentro do loop for. Isso garantirá que todas as solicitações de ajax sejam eliminadas.
fonte
Veja como conectar isso a qualquer clique (útil se a sua página estiver fazendo muitas chamadas AJAX e você estiver tentando navegar).
fonte