Comment puis-je arrêter la demande d'ajax (n'attendez-vous pas que la réponse arrive)?

Si j'utilise Ajax pour envoyer une demande et que cette demande prend longtemps … si je souhaite envoyer une autre demande, que dois-je faire?

Le comportement actuel de la deuxième requête (j'ai fait) en attente jusqu'à ce que la première demande obtienne une réponse.

REMARQUE: je veux faire ce comportement sur une application entière (toute nouvelle demande exécutée immédiatement ne pas attendre que l'ancienne soit terminée en premier) Ma application utilisant (Ajax + PHP + jQuery + Symfony)

Supposons que la première demande prenne beaucoup de temps:

$.ajax ({ type: "GET", url: url1, success: function (html) { // do some thing } }); 

En tout temps, je souhaite que cette demande exécute et termine le premier.

 $.ajax ({ type: "POST", url: url, success: function (html) { // do some thing else } }); 

 var xhrReq; xhrReq = $.ajax(...); // then if you want to stop the rqest and exit use : xhrReq.abort(); 

C'est une sorte de processus manuel, mais vous pouvez ajouter un objet xhr global et le tester sur chaque demande. Si le code de lecture est "en cours de chargement", annulez-le:

 var xhr; var loadUrl = function(url) { if ( xhr && xhr.readyState > 0 && xhr.readyState < 4 ) { // there is a request in the pipe, abort xhr.abort(); } xhr = $.get(url, function() { console.log('success', this); }); }; loadUrl('/ajax/'); 

L'objet XMLHttpRequest a une fonction d' interruption . Vous pouvez utiliser setTimeout pour annuler une requête qui dure trop longtemps.

EDIT: Dans le cas où vous ne souhaitez pas utiliser une minuterie, et qu'un nouvel événement se produit, il faut interrompre la demande précédente, alors le gestionnaire d'événement devrait effectuer les opérations suivantes

 if(!this.request) return; // request contains the XMLHttpRequest this.request.onreadystatechange = function() {}; if(this.request.readyState != 4) { this.request.abort(); } 

Ensuite, vous pouvez créer le nouvel objet XMLHttpRequest.

J'ai travaillé de nombreuses façons et je pense avoir trouvé une solution de travail. J'ai eu un processus de mise en cache qui faisait tomber une page jusqu'à ce qu'il soit terminé (en moyenne 5 secondes). Oui, cela est mieux adapté à un travail CRON, mais j'ai dû créer un processus de mise en cache pour l'utilisateur sans connaître l'environnement qu'ils utilisent pour mon CMS. Ce que j'avais fait: Créez l'appel dans une variable, puis supprimez-le par une suppression difficile. En supprimant cela, il semble supprimer l'attente. Ce "piratage" semblait tirer l'attente de la moyenne de 5 secondes à une attente de 325ms.

 var ignore = $.ajax({ url:something/here.php, type: "GET", url: url1, success: function(){} }); delete ignore; 

Définition de la variable de demande ajax:

 var xhr; 

Faire l'appel ajax:

 xhr = $.ajax(...); 

Annulation de l'appel ajax:

 xhr.abort(); 

Le navigateur vous permet de gérer uniquement des demandes limitées au même hôte à l'heure (2 ou 3 dont je me souviens, selon le navigateur).

La solution de rechange sur le nombre de demandes consiste à créer de faux domaines – comme img1.domain.com, img2.domain.com, etc. conduisant au même hôte et les utiliser de manière aléatoire dans les requêtes. Ensuite, vous pouvez simplement faire des demandes dont vous avez besoin. Le nombre de domaines doit être choisi en fonction de la quantité de demandes afin de respecter les limites – 2 demandes par domaine. Sinon, la 3ème demande attendra jusqu'à une finition active.

Il vous permet de recevoir des réponses de toutes vos demandes. Par exemple, Google l'utilise pour rendre les images plus rapides.

MODIFIER:

Exemple: vous avez http://yourhost.com/ et alias http://alias.yourhost.com qui indique le même endroit. Alors:

 $.ajax ({ type: "GET", url: 'http://yourhost.com/somescript.php', success: function (html) { // do some thing } }); 

et alors

 $.ajax ({ type: "POST", url: 'http://alias.yourhost.com/somescript2.php', success: function (html) { // do some thing else } });