Dans la méthode d'interrogation AJAX traditionnelle, le client interroge le serveur pour obtenir les dernières données à des intervalles définis par l'utilisateur. Cette méthode d'extraction de données nécessite un court intervalle de temps pour garantir l'exactitude des données, mais si l'intervalle de temps est trop court, le service client enverra plusieurs requêtes au serveur dans un court laps de temps.
HTTP est un protocole unidirectionnel sans état. Les utilisateurs ne peuvent envoyer des requêtes au serveur que via le client et le serveur traitera et renverra une réponse. Pour mettre en œuvre des applications de messagerie instantanée telles que les salons de discussion, WEBQQ, le service client en ligne et les boîtes aux lettres, la « technologie Server Push (Comet) » doit être utilisée.
Dans la méthode d'interrogation AJAX traditionnelle, le client interroge le serveur pour connaître les dernières données à des intervalles définis par l'utilisateur. Cette méthode d'extraction de données nécessite un court intervalle de temps pour garantir l'exactitude des données, mais si l'intervalle de temps est trop court, le service client enverra plusieurs requêtes au serveur dans un court laps de temps.
AJAX inversé, appelé interrogation longue ou COMET. Le serveur et le client doivent maintenir une requête à long terme, ce qui permet au serveur de renvoyer des messages au client lorsqu'il existe des données.
Le temps demandé atteint 80 secondes. Si aucun « succès » n'est renvoyé par le serveur pendant ces 80 secondes, l'état de la connexion restera jusqu'à ce que les données soient renvoyées ou que la valeur de « succès » soit 0 avant la fermeture de la connexion. Après avoir fermé la connexion, passez à la requête suivante.
<p id="msg"></p> <input id="btn" type="button" value="测试" />
PHP
Voici une boucle infinie La condition finale de la boucle est d'obtenir le résultat de retour et de renvoyer les données Json. Et accepte le paramètre $_POST['time'] pour limiter le délai d'expiration de la boucle afin d'éviter un gaspillage excessif de ressources. (Le navigateur n'enverra pas de message au serveur lorsqu'il est fermé, et l'utilisation peut continuer en boucle)$(function(){ $("#btn").bind("click",{btn:$("#btn")},function(evdata){ $.ajax({ type:"POST", dataType:"json", url:"data.php", timeout:80000, //ajax请求超时时间80秒 data:{time:"80"}, //40秒后无论结果服务器都返回数据 success:function(data,textStatus){ //从服务器得到数据,显示数据并继续查询 if(data.success=="1"){ $("#msg").append("<br>[有数据]"+data.text); evdata.data.btn.click(); } //未从服务器得到数据,继续查询 if(data.success=="0"){ $("#msg").append("<br>[无数据]"); evdata.data.btn.click(); } }, //Ajax请求超时,继续查询 error:function(XMLHttpRequest,textStatus,errorThrown){ if(textStatus=="timeout"){ $("#msg").append("<br>[超时]"); evdata.data.btn.click(); } } }); }); });
Effet de fonctionnement : Sur l'image, vous pouvez voir que le temps de requête sans données atteint 40S dans la demande 40S, si demande de fermeture lorsque les données sont obtenues.
J'ai compilé ce qui précède pour vous, j'espère que cela vous sera utile à l'avenir.
if(emptyempty($_POST['time']))exit(); set_time_limit(0);//无限请求超时时间 $i=0; while (true){ //sleep(1); usleep(500000);//0.5秒 $i++; //若得到数据则马上返回数据给客服端,并结束本次请求 $rand=rand(1,999); if($rand<=15){ $arr=array('success'=>"1",'name'=>'xiaocai','text'=>$rand); echo json_encode($arr); exit(); } //服务器($_POST['time']*0.5)秒后告诉客服端无数据 if($i==$_POST['time']){ $arr=array('success'=>"0",'name'=>'xiaocai','text'=>$rand); echo json_encode($arr); exit(); } }
Des exemples spécifiques à Jquery présentent quand utiliser AJAX et où AJAX doit être utilisé
À propos des problèmes inter-domaines Ajax Deux solutionscode barre de progression js ajax lors du chargement
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!