Maison > Article > interface Web > Apprenez à mettre fin au $.AJAX request_jquery de JQUERY
J'ai récemment constaté que si les utilisateurs cliquent fréquemment sur les requêtes ajax, il y a deux problèmes :
1. Si vous cliquez sur 5 requêtes ajax d'affilée, les 4 premières sont en fait invalides. Terminez-la dès que possible pour économiser des ressources.
2. Le problème le plus grave est le suivant : la réponse à la dernière demande envoyée peut ne pas être la dernière, ce qui peut prêter à confusion. Une file d'attente est également nécessaire pour conserver les demandes et les réponses envoyées.
J'ai en fait conçu l'implémentation de la file d'attente, et j'ai découvert plus tard que jQuery utilise directement la méthode abort, donc il n'y a pas besoin d'une implémentation aussi compliquée. Après tout, il y a d'autres choses qui attendent d'être terminées.
Il est vraiment pratique d'utiliser jquery pour envoyer des requêtes ajax, $.get, $.post, $.ajax, etc., mais parfois nous devons mettre fin à la requête ajax à mi-chemin.
Par exemple, lorsque vous utilisez Comet pour discuter, après l'envoi d'une requête, le serveur actualise généralement le lien et renvoie les données après des dizaines de secondes. Supposons que le serveur actualise le lien toutes les 30 secondes. Et si nous voulons arrêter la requête ajax toutes les 10 secondes ?
Commençons par le code et expliquons plus tard
var ajaxGet = $.get(“comet_server.php”,{id:1},function(data){ ….//一些操作 }); ajaxGet.abort();
Le code ci-dessus se compose de deux points de connaissance :
1. Le type de données renvoyé par $.get est XMLHttpRequest, veuillez vous référer au manuel. (Il en va de même pour $.post, $.ajax, $.getJSON, $.getScript)
2. L'objet XMLHttpRequest a la méthode abort()
Remarque : après abort(), la requête ajax s'arrête immédiatement, mais la fonction suivante() sera toujours exécutée. Si vous souhaitez éviter d'effectuer les opérations, vous pouvez ajouter un jugement au début de function()
var ajaxGet = $.get(“comet_server.php”,{id:1},function(data){ if(data.length == 0) return true; ….//一些操作 }); ajaxGet.abort();
Terminer la requête ajax :
var request = $.get(“ajax.aspx”,{id:1},function(data){ //do something }); //终止请求动作. request.abort();
Empêcher les demandes en double :
var request; if(request != null) request.abort(); request = $.get(“ajax.aspx”,{id:1},function(){ //do something }); ajax & setTimeout实现 secondTry 在等待一秒之后将firstTry的ajax终止: var firstTry = $.ajax( //do something ); var secondTry = setTimeout(function(){alert(‘ok');firstTry.abort()},1000);