Page 1 sur 1

Délai maxi pour obtention réponse à HTMLrequest

Posté : 22 juil. 2008, 10:18
par flashy38
Bonjour,

Il semblerait qu'il existe un délai maximum pour obtenir la réponse à une HTMLrequest, mais je ne sais pas quel est ce délai et surtout s'il existe une méthode pour contourner ce problème…

Voici un exemple pour illustrer mon problème :

Fichier test.html :

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>test</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="-1"> <meta name="robots" content="index,nofollow"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <script type="text/javascript"> function test() { var xhr_object = null; if(window.XMLHttpRequest) // Firefox xhr_object = new XMLHttpRequest(); else if(window.ActiveXObject) // Internet Explorer xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); else { // XMLHttpRequest non supporté par le navigateur alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); return; } xhr_object.onreadystatechange = function() { if(xhr_object.readyState == 4) { var reponse= xhr_object.responseText; document.getElementById("reponse").innerHTML=reponse; } } xhr_object.open("GET","boucle.php",true); xhr_object.send(); } </script> </head> <body> <div id="reponse" style="border: 1px solid black; height:10px;"></div> <input type="button" value="start" onclick="test()" /> </body> </html>
Fichier boucle.php :

Code : Tout sélectionner

<?php header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); @set_time_limit(0); $nb_iter=120; // nombre d'itérations for ($i=0; $i<$nb_iter; $i++) { echo "boucle $i\n"; sleep (1); } $fp=fopen("reponse.txt","w"); fwrite($fp,"Nb itérations : $i"); fclose($fp); echo "Fin"; ?>

Si je mets un nombre faible d'itérations (10 par exemple) dans le script boucle.php, là, pas de problème.
Par contre, si je mets un nombre plus élevé d'itérations (120 par ex), je me retrouve avec ce message dans mon div "reponse" :
Network Error (tcp_error)
A communication error occurred: ""
The Web Server may be down, too busy, or experiencing other problems preventing it from responding to requests. You may wish to try again at a later time.
Par contre, l'execution du script php continue bien car j'ai bien "Nb itérations : 120" dans mon fichier reponse.txt !!

Si vous avez des pistes pour contourner ce problème, je suis preneur !!!

Posté : 05 août 2008, 08:04
par Nagol
je pense qu'il s'agit d'un problème relatif au navigateur et non pas relatif à ajax proprement dit.

le timeout est simplement celui du navigateur sur une requête http et parfaitement contournable en configurant celui ci, ce qui signifie aussi que tu ne peux pas corriger ce problème pour les autres.

la solution consisterait à avoir un système qui te répond qu'il n'a pas encore la réponse, et que tu setTimeOut un truc pour récupérer ultérieurement le résultat par exemple.