OVH Community, votre nouvel espace communautaire.

http request qui ne renvoit rien


bubarnet
06/02/2013, 21h43
Bon, si je réfléchissais un peu plus, ça irait mieux ! Déjà en utilisant setTimeout et non setInterval. Ensuite avec un check_delay de 200 milliseconds, il vaut mieux que les serveurs ovh soient méchamment rapide ! Pas sûr que ça suffise, mais ça ne pourra pas être pire !

EDIT : merci cassiopee, j'ai écrit ma réponse pendant que tu postais la tienne

cassiopee
06/02/2013, 21h36
Est-ce que c'est vraiment la fonction checkReponse() qui n'est pas appelée
ou est que c'est le test "if(tab_req[0]&&tab_req[0].hasResponse())" qui échoue
et comme il n'y a pas d'autre code dans la fonction, cela donne l'impression qu'elle
n'a pas été appelée ?

bubarnet
06/02/2013, 21h00
J'utilise des requêtes xml http request sur mon site. Je l'ai entièrement développé en local avec les mêmes versions de php/mysql (mais pas forcément les mêmes réglages).

En local, chaque requête renvoie bien quelque chose. Une fois, en ligne, je ne reçoit qu'une réponse sur 10, et encore.

J'ai récupérer un code qui se charge simplement de ces requêtes. Est-ce lui qui est en cause ?

Mon code

Code:
//Dans la page php que voit l'utilisateur
var check_delay=200;
var tab_req=new Array(); //Je pourrais m'en passer, mais cela permet plusieurs requêtes simultanées, ce que je n'ai pas encore tenté. Je me limite à un seul appel concurrent, au moins pour l'instant

function appelHttpRequest(ID)
{
  var postdata="ID="+ID;
  tab_req[0]=new CreateXMLHTTPRequestObject();
  tab_req[0].setIndicatorFunction(toggleIndicator);
  if(!tab_req[0].getFilePost("xhr_page.php",postdata))
  {
  	alert(unescape("Une erreur s'est produite"));
  	return;
  }
  setTimeout("checkReponse()",check_delay);
}

function toggleIndicator(bflag)
{
  //fait apparaitre/disparaitre un DIV pour patienter
}

function checkReponse()
{
  if(tab_req[0]&&tab_req[0].hasResponse())
  {
     var rep=tab_req[0].getResponse();
     tab_req[0].validateRequest();
     tab_req.splice(0,1);
     if (rep.substring(0,3)=="ERR")
     {
   	alert("Une erreur est survenue);
    	return;
     }
     alert("OK"));
   }
}
La page xhr_page.php fait toujours bien son boulot et termine par un echo "OK " ou echo "ERR code erreur" (je vais améliorer les erreurs, mais il faudrait déjà que ça marche).

Le problème c'est que 9 fois sur 10, la fonction checkReponse() n'est jamais appelé, même après le délai max. Par contre, le fonction toggleIndicator() fait bien son travail en affichant puis faisant disparaitre le message d'attente.

Le pire, c'est que si je rajoute une simple alert("coucou"); au début de la fonction checkReponse(), je reçois presque toujours une réponse.

J'ai essayé avec firefox, IE32 et IE64, rien à faire.

Quelqu'un pourrait-il me donner un coup de main pour résoudre ce problème ?