Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/04/2008, 12h56   #1
Membre éprouvé
 
Homme Marwan Rabbaa
Technophile Web
Inscription : mai 2007
Messages : 930
Détails du profil
Informations personnelles :
Nom : Homme Marwan Rabbaa

Informations professionnelles :
Activité : Technophile Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2007
Messages : 930
Points : 412
Points : 412
Envoyer un message via MSN à sliderman Envoyer un message via Yahoo à sliderman
Par défaut Erreur d'appel Ajax

Bonjour,

J'ai développé une fonction
Code :
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
/** Use XHR method to bring back what a script display
 * @param The Script URL 
 * @access Public */
function asynchronousCall(url)
{
	var xhr = null;
	if (window.XMLHttpRequest)
	{
	  xhr = new XMLHttpRequest();
	}
	else if (window.ActiveXObject) 
	{
 		try 
  		{ 
    		xhr = new ActiveXObject("Msxml2.XMLHTTP");
  		} 
  		catch (e) 
  		{
     		try 
     		{ 
        		xhr = new ActiveXObject("Microsoft.XMLHTTP");
     		} 
     		catch (e) 
     		{
       			window.alert("Votre navigateur ne prend pas en charge l'objet XMLHTTPRequest.");
     		}
  		} 
	}
	xhr.onreadystatechange = function()
	{
		if (xhr.readyState==4)
		{
			if (xhr.status==200)
			{
				return xhr.responseXML;	
			}
		}
	}
	xhr.open("GET",url,true)
	xhr.send(null);
}
mais voila lorsque je tente de réafficher le résulta de cette fonction (normallement ce que le return me fournis), j'ai le droit à un undefined
Code :
1
2
var ajax = asynchronousCall('./web-services/list-companies.php');
	alert(ajax);
ajax = undefined

ma question est simple, pourquoi ?
__________________
http://aldorande.miniville.fr/ind
Fedora 8, eclipse 3.3 sur x86_64
--------------
Colorer votre code php
sliderman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 18h22   #2
Invité régulier
 
Inscription : décembre 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 10
Points : 9
Points : 9
Tu travailles en mode Asynchrone, JE te conseillerais de faire un
(à la place du return)
comme ça, tu peux facilement situer ton problème.
A mon avi, ta fonction (asynchronousCall) ne retourne rien. à vérifier.
THE Drog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 22h52   #3
Modérateur
 
Avatar de DoubleU
 
Inscription : janvier 2006
Messages : 1 107
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 107
Points : 1 118
Points : 1 118
Citation:
A mon avi, ta fonction (asynchronousCall) ne retourne rien. à vérifier.
C'est ca.

Code :
1
2
3
4
5
6
7
8
9
10
	xhr.onreadystatechange = function()
	{
		if (xhr.readyState==4)
		{
			if (xhr.status==200)
			{
				return xhr.responseXML;	
			}
		}
	}
Le return est dans la fonction interne définie sur le xhr.onreadystatechange, donc tu ne peux pas retourner de résultat à l'extérieur de ta fonction.
DoubleU est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 09h52   #4
Membre éprouvé
 
Homme Marwan Rabbaa
Technophile Web
Inscription : mai 2007
Messages : 930
Détails du profil
Informations personnelles :
Nom : Homme Marwan Rabbaa

Informations professionnelles :
Activité : Technophile Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2007
Messages : 930
Points : 412
Points : 412
Envoyer un message via MSN à sliderman Envoyer un message via Yahoo à sliderman
compirs

javascript n'a pas le même fonctionnement que PHP (tu pe faire des return dans les fonctions, dans des boucles, dans des conditions ...)

donc j'initalise une variable toReturn (par exemple)
Code :
var toReturn = xhr.responseXML
puis à la fin de mon code, je fais un
EDIT : et bien non j'ai tout faux
même si je déclare ma variable javascript censée récupérer le XML au début (je l'intialise à null), elle est tjrs null
__________________
http://aldorande.miniville.fr/ind
Fedora 8, eclipse 3.3 sur x86_64
--------------
Colorer votre code php
sliderman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 17h32   #5
Invité régulier
 
Inscription : décembre 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 10
Points : 9
Points : 9
Citation:
Envoyé par sliderman Voir le message
compirs

javascript n'a pas le même fonctionnement que PHP (tu pe faire des return dans les fonctions, dans des boucles, dans des conditions ...)

donc j'initalise une variable toReturn (par exemple)
Code :
var toReturn = xhr.responseXML
puis à la fin de mon code, je fais un
EDIT : et bien non j'ai tout faux
même si je déclare ma variable javascript censée récupérer le XML au début (je l'intialise à null), elle est tjrs null
je crois que tu n'a pas encore compris le fonctionnement du truc.
si tu veux vraiment récupérer la valeur de ton XML, il faut surement faire du synchrone
et dans ce cas, ça devrait être bon.
en gros (je ne sais pas si le 'get' supporte, mais le 'post' oui)
et derrière, tu recupère directement ton mais quand ce n'est pas 'synchrone', tu ne sais pas en fait que la requête a été exécutée.

C'est pour cela qu'on fait son tratirement dans la fonction 'handler'
en gros quand tu fais:
Code :
1
2
3
4
5
6
7
8
9
xhr.onreadystatechange = function()
	{
               // blblallalala
 
//alert('etc');
//crer tes divs;
//set ton_InnerHTML
/etc ...
	}
Sachant seulement que ton Ajax fonctionne en 'asynchrone', le fonctionnement que tu décrit serait bien normal et heureusement.
THE Drog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 09h26   #6
Membre éprouvé
 
Homme Marwan Rabbaa
Technophile Web
Inscription : mai 2007
Messages : 930
Détails du profil
Informations personnelles :
Nom : Homme Marwan Rabbaa

Informations professionnelles :
Activité : Technophile Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2007
Messages : 930
Points : 412
Points : 412
Envoyer un message via MSN à sliderman Envoyer un message via Yahoo à sliderman
Citation:
Envoyé par THE Drog Voir le message
je crois que tu n'a pas encore compris le fonctionnement du truc.
si tu veux vraiment récupérer la valeur de ton XML, il faut surement faire du synchrone
et dans ce cas, ça devrait être bon.
en gros (je ne sais pas si le 'get' supporte, mais le 'post' oui)
et derrière, tu recupère directement ton mais quand ce n'est pas 'synchrone', tu ne sais pas en fait que la requête a été exécutée.

C'est pour cela qu'on fait son tratirement dans la fonction 'handler'
en gros quand tu fais:
Code :
1
2
3
4
5
6
7
8
9
xhr.onreadystatechange = function()
	{
               // blblallalala
 
//alert('etc');
//crer tes divs;
//set ton_InnerHTML
/etc ...
	}
Sachant seulement que ton Ajax fonctionne en 'asynchrone', le fonctionnement que tu décrit serait bien normal et heureusement.
je n'ai pas compris pourquoi tu me parle de 'synchrone'.
En fait, ce que je veux faire c'est pas une fonction qui execute un apel XHR (pour un traitement), mais plutot une fonction qui execute un XR et me retour son responseXML (fonction générique)
__________________
http://aldorande.miniville.fr/ind
Fedora 8, eclipse 3.3 sur x86_64
--------------
Colorer votre code php
sliderman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 10h20   #7
Modérateur
 
Avatar de DoubleU
 
Inscription : janvier 2006
Messages : 1 107
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 107
Points : 1 118
Points : 1 118
Comme dit plus haut, c'est impossible de faire un return, que tu sois en synchro ou en asynchro.

J'avais donné une bidouille ici pour arriver à avoir un résultat sensiblement pareil, mais c'est vraiment à utiliser dans des cas particuliers...
DoubleU est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h53.


 
 
 
 
Partenaires

Hébergement Web