Bonjour =)
Je vient de développer une classe pour faire un Chat en Ajax/sockets php. Un des fonction consiste a lancer un script d'écoute, afin d'afficher les sockets reçu.
M'étant directement inspiré d'une fonction déjà existante sur le web, j'ai essayé de modifier cette fonction pour utiliser la librairie Protoype, que j'utilise régulièrement. La fonction d'origine ne fonctionnant pas sous IE

Voici la fonction en question:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
function listen() {
 
		setScroll();
		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;
		                }
		        }
 
		var method   = "POST";
		var filename = "getajax.php";
		var requete  = "module=chatv&script=listen";
		var taille = 0; //Le nombre de caractères déjà reçus
		var update = function()
		{
		        if(xhr_object.readyState == 3 && xhr_object.responseText.length > taille)
		            {
		            taille = xhr_object.responseText.length;
		            var reponse = xhr_object.responseText;
		            $("chatContentReal").innerHTML = reponse;
		            setScroll();
		            }
		    setTimeout(update,1000);
		};
		update();
 
		xhr_object.open(method, filename, true);
 
		xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
 
		xhr_object.send(requete);
 
	}
J'ai tenter ceci, mais ce n'est pas très efficace ^^:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function listen() {
 
		setScroll();
		var update = function()
		{
			var ajaxRequest = new Ajax.Request('getajax.php',
			{
				parameters: {module: 'chatv', script: 'listen'},
				method: 'post', 
				onSuccess: function(e)
				{
					$("chatContentReal").innerHTML = reponse;
					setScroll();
				} 
			})	
 
		}
		update();
 
	}
Avec ce code, l'affichage ne se fait que lorsque la fonction est interrompu (fermeture de la fenêtre par exemple) Comment rentrer dans onSuccess (changer onSuccess ? par quoi ?) sans que le script php ne soit terminé ? (vu qu'il tourne en boucle pour écouter le serveur)
Je ne vois pas trop comment faire :/

si vous avez une idée