récupérer une variable créée dans une autre fonction
17 réponses
Jibé
Bonjour,
J'ai une fonction httpxmlrequest qui va me chercher une valeur dans une
table. Afin de pouvoir réutiliser le code au maximum je voudrais
détacher ce que je fais du résultat de l'obtention du résultat lui même...
EN gros une fonction qui fait la requête et renvoie le résultat
puis une fonction qui appelle la première et traite le résultat pour
l'afficher.
N'étant pas hyper doué en javascript (mais je progresse...) je m'arrache
les cheveux sur le code suivant:
function trim(str) {
return str.replace(/(^\s*)|(\s*$)/g,"")
}
/* merci ASM */
function cherche(depart,requete,arrivee){
var xhr_object = null;
var x = depart;
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 && xhr_object.status == 200){
monresultat = trim(xhr_object.responseText);
}
}
xhr_object.open("POST",requete,true);
xhr_object.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
var data = "id="+x;
xhr_object.send(data);
}
function cherchegauche(depart,requete,arrivee){
if(document.getElementById(arrivee).style.display=='none'){
cherche(depart,requete,arrivee);
alert(monresultat);
document.getElementById(arrivee).innerHTML = monresultat;
document.getElementById(arrivee).style.display='block';
Il se passe un truc étrange.
Au premier clic j'ai un magnifique "monresultat is indefined"
au second clic mon alert fonctionne mais rien d'autre ne se passe.
Si vous voyez ou je déc..... merci de m'aider
JiBé
J'ai une fonction httpxmlrequest qui va me chercher une valeur dans une table. Afin de pouvoir réutiliser le code au maximum je voudrais détacher ce que je fais du résultat de l'obtention du résultat lui même... EN gros une fonction qui fait la requête et renvoie le résultat puis une fonction qui appelle la première et traite le résultat pour l'afficher. N'étant pas hyper doué en javascript (mais je progresse...) je m'arrache les cheveux sur le code suivant:
function trim(str) { return str.replace(/(^s*)|(s*$)/g,"") } /* merci ASM */
function cherche(depart,requete,arrivee){ var xhr_object = null; var x = depart; 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 && xhr_object.status == 200){ monresultat = trim(xhr_object.responseText);
return monresultat;
ou direct : return trim(xhr_object.responseText);
} } xhr_object.open("POST",requete,true); xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); var data = "id="+x; xhr_object.send(data); }
function cherchegauche(depart,requete,arrivee){ if(document.getElementById(arrivee).style.display=='none'){ cherche(depart,requete,arrivee);
ici il faut attendre le retour de la requette, essayer :
var monresultat = cherche(depart,requete,arrivee);
Il se passe un truc étrange. Au premier clic j'ai un magnifique "monresultat is indefined"
oui, normal, puisqu'il n'est défini nulle part ...
au second clic mon alert fonctionne
normal aussi, la requette a eu le temps de se faire, monresultat est maintenant connu.
mais rien d'autre ne se passe.
c'est à dire ?
(faudrait peut-être re-re-cliquer pour re-passer 'arrivee' en block ?)
-- ASM
Bonjour,
J'ai une fonction httpxmlrequest qui va me chercher une valeur dans une
table. Afin de pouvoir réutiliser le code au maximum je voudrais
détacher ce que je fais du résultat de l'obtention du résultat lui même...
EN gros une fonction qui fait la requête et renvoie le résultat
puis une fonction qui appelle la première et traite le résultat pour
l'afficher.
N'étant pas hyper doué en javascript (mais je progresse...) je m'arrache
les cheveux sur le code suivant:
function trim(str) {
return str.replace(/(^s*)|(s*$)/g,"")
}
/* merci ASM */
function cherche(depart,requete,arrivee){
var xhr_object = null;
var x = depart;
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 && xhr_object.status == 200){
monresultat = trim(xhr_object.responseText);
return monresultat;
ou direct :
return trim(xhr_object.responseText);
}
}
xhr_object.open("POST",requete,true);
xhr_object.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
var data = "id="+x;
xhr_object.send(data);
}
function cherchegauche(depart,requete,arrivee){
if(document.getElementById(arrivee).style.display=='none'){
cherche(depart,requete,arrivee);
ici il faut attendre le retour de la requette,
essayer :
var monresultat = cherche(depart,requete,arrivee);
J'ai une fonction httpxmlrequest qui va me chercher une valeur dans une table. Afin de pouvoir réutiliser le code au maximum je voudrais détacher ce que je fais du résultat de l'obtention du résultat lui même... EN gros une fonction qui fait la requête et renvoie le résultat puis une fonction qui appelle la première et traite le résultat pour l'afficher. N'étant pas hyper doué en javascript (mais je progresse...) je m'arrache les cheveux sur le code suivant:
function trim(str) { return str.replace(/(^s*)|(s*$)/g,"") } /* merci ASM */
function cherche(depart,requete,arrivee){ var xhr_object = null; var x = depart; 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 && xhr_object.status == 200){ monresultat = trim(xhr_object.responseText);
return monresultat;
ou direct : return trim(xhr_object.responseText);
} } xhr_object.open("POST",requete,true); xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); var data = "id="+x; xhr_object.send(data); }
function cherchegauche(depart,requete,arrivee){ if(document.getElementById(arrivee).style.display=='none'){ cherche(depart,requete,arrivee);
ici il faut attendre le retour de la requette, essayer :
var monresultat = cherche(depart,requete,arrivee);
Exemple perso : http://stephane.moriaux.perso.orange.fr/truc/hrequ/requete.js
-- ASM
Jibé
mais ... normalement ça a été vu dans cherche(), non ?
Ben oui, c'est là que je ne comprends pas.
Si je mets tout dans la même fonction cad la recherche via xmlhttprequest ET les fonctions d'affichage et de modification de l'image tout fonctionne
Si je fais deux fonctions, une avec la recherche et l'autre récupérant le résultat et gérant l'affichage, ça ne marche pas (monresultat est indéfini).
j'ai essayer de faire une boucle pour gagner du temps et attendre la réponse du serveur mais rien à faire pour le moment. Pourtant ça m'arrangerait de gérer les choses en deux fonctions pour réutiliser au maximum le fonction de requête quelque soit l'affichage à gérer....
Exemple perso : http://stephane.moriaux.perso.orange.fr/truc/hrequ/requete.js
mais ... normalement ça a été vu dans cherche(), non ?
Ben oui, c'est là que je ne comprends pas.
Si je mets tout dans la même fonction cad
la recherche via xmlhttprequest ET les fonctions d'affichage et de
modification de l'image tout fonctionne
Si je fais deux fonctions, une avec la recherche et l'autre récupérant
le résultat et gérant l'affichage, ça ne marche pas (monresultat est
indéfini).
j'ai essayer de faire une boucle pour gagner du temps et attendre la
réponse du serveur mais rien à faire pour le moment.
Pourtant ça m'arrangerait de gérer les choses en deux fonctions pour
réutiliser au maximum le fonction de requête quelque soit l'affichage à
gérer....
mais ... normalement ça a été vu dans cherche(), non ?
Ben oui, c'est là que je ne comprends pas.
Si je mets tout dans la même fonction cad la recherche via xmlhttprequest ET les fonctions d'affichage et de modification de l'image tout fonctionne
Si je fais deux fonctions, une avec la recherche et l'autre récupérant le résultat et gérant l'affichage, ça ne marche pas (monresultat est indéfini).
j'ai essayer de faire une boucle pour gagner du temps et attendre la réponse du serveur mais rien à faire pour le moment. Pourtant ça m'arrangerait de gérer les choses en deux fonctions pour réutiliser au maximum le fonction de requête quelque soit l'affichage à gérer....
Exemple perso : http://stephane.moriaux.perso.orange.fr/truc/hrequ/requete.js
ASM
mais ... normalement ça a été vu dans cherche(), non ?
Ben oui, c'est là que je ne comprends pas.
Si je mets tout dans la même fonction cad la recherche via xmlhttprequest ET les fonctions d'affichage et de modification de l'image tout fonctionne
et as-tu essayé :
function trim(str) { return str.replace(/(^s*)|(s*$)/g,"") } /* merci ASM mais suis-je pour qque chose là dedans ? */
function cherche(depart,requete,arrivee){ var xhr_object = null; var x = depart; 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 && xhr_object.status == 200){ return trim(xhr_object.responseText); } } xhr_object.open("POST",requete,true); xhr_object.setRequestHeader("Content-type","application/x-www-form-urlencoded"); var data = "id="+x; xhr_object.send(data); }
mais ... normalement ça a été vu dans cherche(), non ?
Ben oui, c'est là que je ne comprends pas.
Si je mets tout dans la même fonction cad
la recherche via xmlhttprequest ET les fonctions d'affichage et de
modification de l'image tout fonctionne
et as-tu essayé :
function trim(str) {
return str.replace(/(^s*)|(s*$)/g,"")
}
/* merci ASM mais suis-je pour qque chose là dedans ? */
function cherche(depart,requete,arrivee){
var xhr_object = null;
var x = depart;
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 && xhr_object.status == 200){
return trim(xhr_object.responseText);
}
}
xhr_object.open("POST",requete,true);
xhr_object.setRequestHeader("Content-type","application/x-www-form-urlencoded");
var data = "id="+x;
xhr_object.send(data);
}
mais ... normalement ça a été vu dans cherche(), non ?
Ben oui, c'est là que je ne comprends pas.
Si je mets tout dans la même fonction cad la recherche via xmlhttprequest ET les fonctions d'affichage et de modification de l'image tout fonctionne
et as-tu essayé :
function trim(str) { return str.replace(/(^s*)|(s*$)/g,"") } /* merci ASM mais suis-je pour qque chose là dedans ? */
function cherche(depart,requete,arrivee){ var xhr_object = null; var x = depart; 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 && xhr_object.status == 200){ return trim(xhr_object.responseText); } } xhr_object.open("POST",requete,true); xhr_object.setRequestHeader("Content-type","application/x-www-form-urlencoded"); var data = "id="+x; xhr_object.send(data); }
function trim(str) { return str.replace(/(^s*)|(s*$)/g,"") } /* merci ASM mais suis-je pour qque chose là dedans ? */ SI, SI il me semble bien que vous m'aviez déjà dépanné une fois pour un
problème de saut de ligne dans une réponse de xmlhttprequest sur ce même forum
Pour la suite j'ai fait un copier coller directement et ça me renvoie tjrs un monsesultat en indéfini. C'est comme si la ligne monresultat = cherche(depart,requete,arrivee); de cherchegauche() n'était pas traitée.
Pourtant quand je regarde la console firebug, la requête est bien partie et le résultat revenu. C'est vraiment étrange ce truc. Et j'ai beau chercher sur le web je ne trouve pas d'exemple où la réponse est traitée en dehors de la fonction.
JiBé
function cherche(depart,requete,arrivee){ var xhr_object = null; var x = depart; 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 && xhr_object.status == 200){ return trim(xhr_object.responseText); } } xhr_object.open("POST",requete,true); xhr_object.setRequestHeader("Content-type","application/x-www-form-urlencoded");
function trim(str) {
return str.replace(/(^s*)|(s*$)/g,"")
}
/* merci ASM mais suis-je pour qque chose là dedans ? */
SI, SI il me semble bien que vous m'aviez déjà dépanné une fois pour un
problème de saut de ligne dans une réponse de xmlhttprequest sur ce même
forum
Pour la suite j'ai fait un copier coller directement et ça me renvoie
tjrs un monsesultat en indéfini.
C'est comme si la ligne
monresultat = cherche(depart,requete,arrivee);
de cherchegauche() n'était pas traitée.
Pourtant quand je regarde la console firebug, la requête est bien partie
et le résultat revenu.
C'est vraiment étrange ce truc. Et j'ai beau chercher sur le web je ne
trouve pas d'exemple où la réponse est traitée en dehors de la fonction.
JiBé
function cherche(depart,requete,arrivee){
var xhr_object = null;
var x = depart;
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 && xhr_object.status == 200){
return trim(xhr_object.responseText);
}
}
xhr_object.open("POST",requete,true);
xhr_object.setRequestHeader("Content-type","application/x-www-form-urlencoded");
function trim(str) { return str.replace(/(^s*)|(s*$)/g,"") } /* merci ASM mais suis-je pour qque chose là dedans ? */ SI, SI il me semble bien que vous m'aviez déjà dépanné une fois pour un
problème de saut de ligne dans une réponse de xmlhttprequest sur ce même forum
Pour la suite j'ai fait un copier coller directement et ça me renvoie tjrs un monsesultat en indéfini. C'est comme si la ligne monresultat = cherche(depart,requete,arrivee); de cherchegauche() n'était pas traitée.
Pourtant quand je regarde la console firebug, la requête est bien partie et le résultat revenu. C'est vraiment étrange ce truc. Et j'ai beau chercher sur le web je ne trouve pas d'exemple où la réponse est traitée en dehors de la fonction.
JiBé
function cherche(depart,requete,arrivee){ var xhr_object = null; var x = depart; 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 && xhr_object.status == 200){ return trim(xhr_object.responseText); } } xhr_object.open("POST",requete,true); xhr_object.setRequestHeader("Content-type","application/x-www-form-urlencoded");
Pour la suite j'ai fait un copier coller directement et ça me renvoie tjrs un monsesultat en indéfini. C'est comme si la ligne monresultat = cherche(depart,requete,arrivee); de cherchegauche() n'était pas traitée.
dernières idées :
- essayer avec : function cherche(depart,requete){ et dans cherchegauche(depart,requete,arrivee) avec monresultat = cherche(depart,requete);
- sinon voir à voir le détail de l'appel de la fonction cherchegauche(...) s'il n'y a pas un lézard par là (une ' oubliée ou qque chose)
Pourtant quand je regarde la console firebug, la requête est bien partie et le résultat revenu.
donc l'alert a bien donné le résultat escompté ?
C'est vraiment étrange ce truc.
ça semble :-(
-- ASM
Pour la suite j'ai fait un copier coller directement et ça me renvoie
tjrs un monsesultat en indéfini.
C'est comme si la ligne
monresultat = cherche(depart,requete,arrivee);
de cherchegauche() n'était pas traitée.
dernières idées :
- essayer avec :
function cherche(depart,requete){
et dans cherchegauche(depart,requete,arrivee)
avec
monresultat = cherche(depart,requete);
- sinon voir à voir le détail de l'appel de la fonction
cherchegauche(...)
s'il n'y a pas un lézard par là (une ' oubliée ou qque chose)
Pourtant quand je regarde la console firebug, la requête est bien partie
et le résultat revenu.
Pour la suite j'ai fait un copier coller directement et ça me renvoie tjrs un monsesultat en indéfini. C'est comme si la ligne monresultat = cherche(depart,requete,arrivee); de cherchegauche() n'était pas traitée.
dernières idées :
- essayer avec : function cherche(depart,requete){ et dans cherchegauche(depart,requete,arrivee) avec monresultat = cherche(depart,requete);
- sinon voir à voir le détail de l'appel de la fonction cherchegauche(...) s'il n'y a pas un lézard par là (une ' oubliée ou qque chose)
Pourtant quand je regarde la console firebug, la requête est bien partie et le résultat revenu.
donc l'alert a bien donné le résultat escompté ?
C'est vraiment étrange ce truc.
ça semble :-(
-- ASM
Jibé
Pourtant quand je regarde la console firebug, la requête est bien partie et le résultat revenu.
donc l'alert a bien donné le résultat escompté ? Et non le alert me dit juste que monresultat undefined...
Et flutte. Je vais regarder ce que vous suggérez dans le weekend.
C'est vraiment étrange ce truc.
ça semble :-(
EN tout cas merci beaucoup pour le temps consacré
JiBé
Pourtant quand je regarde la console firebug, la requête est bien
partie et le résultat revenu.
donc l'alert a bien donné le résultat escompté ?
Et non le alert me dit juste que monresultat undefined...
Et flutte.
Je vais regarder ce que vous suggérez dans le weekend.