[AJAX] manager AJAX probleme de porté de variable
bonjour
je suis en train de programmer une application en javascript + ajax
j'ai déja lu les doc + parcouru le forum + google ( à en perdre la tete )
pour comprendre mon probleme, je souhaite faire une breve description de mon programme de test sans AJAX
Soit un objet A
Code:
1 2 3 4 5 6 7 8
|
//cette objet sert a gerer un div quelquonque
function A()
{
this.id=0; // c'est une variable quelquonque
this.getId=function(){ return id; } // renvoit la valeur de la variable
this.update=function(pValue){ this.id=pValue; }
} |
Soit un manager AJAX
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
|
function AJAX_MANAGER()
{
this.tab=Array(); //tableau de nom de mes elements
//fonction qui ajoute dynamiquement des objets au manager
// j'utilise la fonction eval pour cela
this.add=function(pName)
{
eval("this."+pName+"=new "+"A();");
//cela donne : this.pName=new A(); et l'execute bien
}
//cette fonction met a jour tout les objet en memoire
this.update=function()
{
for(var i=0;i < this.tab.length ; i++)
{
//evaluer l'objet avec sa methode update
eval("this."+this.tab[i]+".update("+i+");");
//cela donne : this.Nomdelobjet.update(i);
}
}
} |
ce morceau de code marche ( si j'ai bien tout recopier )
le probleme c'est quand j'ajoute de l'ajax dans la partie update
car le but est de mettre a jour tous les objet A() qui sont gerer par le manager de maniere dynamique
( pour cette je peut pas les mettres en dur dans mon manager )
si qqu'un connait un site un tuto ou une portion de code qui l'a déja fait peut il me le dire ??? et me décrire un peu le code si il l'a compris ?
sinon je continue mon explication ...
Rajoutons de l'ajax :)
modifions donc la classe
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 42 43 44 45 46 47 48
|
function AJAX_MANAGER()
{
this.tab=Array(); //tableau de nom de mes elements
/* creer un objet xmlhttprequest */
var xhr = null;
if (typeof XMLHttpRequest != 'undefined'){
xhr = new XMLHttpRequest();
}
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
//fonction qui ajoute dynamiquement des objets au manager
// j'utilise la fonction eval pour cela
this.add=function(pName)
{
eval("this."+pName+"=new "+"A();");
//cela donne : this.pName=new A(); et l'execute bien
}
//cette fonction met a jour tout les objet en memoire
this.update=function()
{
for(var i=0;i < this.tab.length ; i++)
{
xhr.onreadystatechange=function()
{
if (xhr.readyState == 4 && xhr.status == 200)
{
eval("this."+this.tab[i]+".update("+xhr.responseText+");");
}
}
xhr.open("GET", "http://google.fr", true);
xhr.send(null);
}
//bien sur on rappelle la fonction car les fenetre se mette a jour
setTimeout("this.update()",1000);
}
}
} |
voila alors cela ne marche pas car à l'intérieur de la fonction
xhr.onreadystatechange=function()
{
if (xhr.readyState == 4 && xhr.status == 200)
{
eval("this."+this.tab[i]+".update("+xhr.responseText+");");
}
}
les variable semble comme inconnu et non utilisable
( il m'affiche qu'il n'ont pas de properties )
voila je peut vous éclairer si vous le souhaiter
cordialement mathieu