XMLHttpRequests qui ne fonctionnent pas très bien...

thomvaill Messages postés 366 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 février 2007 - 12 mars 2006 à 19:50
thomvaill Messages postés 366 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 février 2007 - 13 mars 2006 à 13:50
Bonjour tout le monde,

Pour mon client IRC en PHP/JavaScript, j'ai un petit problème
avec deux XMLHttpRequest (que j'appellerai par la suite xmlh, ça va
plus vite ^^).



Donc j'ai une xmlh qui tourne en boucle, qui lit les données qu'elle reçoit d'une page PHP...



Et j'ai une autre xmlh qui est appellée de temps en temps qui appelle,
elle, une autre page et qui lui envoie des informations en méthode
POST. Et normalement, juste après cet envoie, l'autre xmlh (qui lit les
données), doit recevoir une réponse. Mais elle ne la reçoit pas.
Pourtant la page PHP l'envoie bien !



Esque deux xmlh peuvent tourner en même temps ? Le problème vient peut être de là...

Voici un bout de code (je n'ai pas pu tout mettre, c'est trop long..)



<script language="javascript">

var xhr_object = null;

var xhr2_object = null;

var chan_active = "Statut";

var res = null;

var res2 = '';

function startt(){



if(window.XMLHttpRequest){ // Firefox

xhr_object = new XMLHttpRequest();

xhr2_object = new XMLHttpRequest();

}else if(window.ActiveXObject){ // Internet Explorer

xhr_object = new ActiveXObject("Microsoft.XMLHTTP");

xhr2_object = new ActiveXObject("Microsoft.XMLHTTP");

}else{ // XMLHttpRequest non supporté par le navigateur

alert("ERREUR FATALE : Votre navigateur
ne supporte pas les XMLHttpRequest (Téléchargez Firefox !)");

return;

}



xhr_object.open("GET", "do.php", true);



var start_ok=false;



xhr_object.onreadystatechange = function() {

if(xhr_object.readyState == 3){

if(start_ok){

return;

}else{

boucle_xhr();

start_ok=true;

}

}

}



xhr_object.send(null);

}



function boucle_xhr(){

res=xhr_object.responseText.replace(res2,"");

res2=res2+res;



var splited = res.split(/\s+/);

if(splited[0]=="new_chan"){

ajout_chan(splited[1]);



}else if(splited[0]=="chan"){


document.getElementById('m_'+splited[1]).innerHTML=document.getElementById('m_'+splited[1]).innerHTML+res.replace(new
RegExp(splited[0]+" "+splited[1],"g"),"");


document.getElementById('m_'+splited[1]).scrollTop=document.getElementById('m_'+splited[1]).scrollHeight;

}else if(splited[0]=="Statut"){


document.getElementById('m_Statut').innerHTML=document.getElementById('m_Statut').innerHTML+res.replace(/Statut/g,"");


document.getElementById('m_Statut').scrollTop=document.getElementById('m_Statut').scrollHeight;

}

setTimeout('boucle_xhr();',3000);

}



function envoie(){



var data =
'message='+document.getElementById('message_send').value+'&fichier_msgs=<?php
echo($fichier_msgs); ?>';



xhr2_object.open('POST', 'send.php', true);







xhr2_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");



xhr2_object.send(data);

document.getElementById('message_send').value='';

}



[... Autre code inintéressant pour cette question ...]

</script>



Donc là fonction startt(); est appellée au chargement de la page. Et la
fonction envoie(); est appellée lors d'un événement sur un bouton.



Merci d'avance.

Thomvaill
IRC : Thomas (irc.heliosnet.org:6667 #programmation)

3 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
12 mars 2006 à 23:55
Salut,

même problème avec des frames ou alors une frame et une xmlhttp...



j'essai de trouver un header pour enlever le keep-alive... mais j'y arrive pas...

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
0
thomvaill Messages postés 366 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 février 2007 2
13 mars 2006 à 13:12
Ca sert à quoi keep-alive ? Garder en vie lol ?

Thomvaill
IRC : Thomas (irc.heliosnet.org:6667 #programmation)
0
thomvaill Messages postés 366 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 février 2007 2
13 mars 2006 à 13:50
coucou747 > J'ai trouvé pour enlever keep-alive sous HTTP/1.1,la
connexion keep-alive est par défault, donc faut envoyer cette header :
Connection: close

donc sous PHP : header('Connection: close');

Et sous HTTP/1.0 ben pour pas avoir le keep-alive faut pas envoyer le header Connection: Keep-Alive

Thomvaill
IRC : Thomas (irc.heliosnet.org:6667 #programmation)
0
Rejoignez-nous