2012-01-04 2 views
0

Dans mon application ajax, j'essaie d'utiliser une fonction récursive à l'intérieur de laquelle une autre fonction est appelée pour créer une variable globale, et je veux utiliser cette variable à l'intérieur de la fonction récursive. Cependant, je rencontre des problèmes parce que je ne peux pas accéder à cette variable globale dans la fonction récursive (bien qu'elle soit disponible si j'appelle cette fonction par elle-même). Le code de la fonction récursive est ci-dessous.Fonction javascript/ajax récursive: impossible d'accéder à la variable globale dans la fonction

ajaxCity.displayCell() définit une variable window.cells [], qui contient un tableau de nombres. L'idée est d'appeler la fonction tree() pour chacun de ces nombres.

function tree (topCell) { 
    var ajaxCity = new Ajax(); 
    ajaxCity.displayCell(topCell); 

    for (var i = 0; i < window.cells[topCell].cKids.length; i++) { 
     tree(window.cells[topCell].cKids[i]); 
    } 
} 

La variable window.cells [] est disponible après je lance la fonction une fois, mais comment dois-je changer le processus afin qu'il fonctionne de la façon dont je me fais?

Merci pour votre aide!

edit: Voici l'erreur que je reçois.

TypeError: window.cells[topCell] is undefined 

si je l'appelle à nouveau la fonction de l'arbre, il va travailler pour un « niveau » plus profond, puis donner à nouveau l'erreur, etc

============== ==

Merci, James Montagne, comme vous l'avez souligné, le problème est que j'ai besoin d'attendre que la requête ajax revienne. Merci encore!

Répondre

2

Je fais quelques hypothèses ici basées sur les noms de variables, mais je considérerai que

ajaxCity.displayCell(topCell); 

fera un appel ajax, dont le résultat sera la création de window.cells....

Si tel est le cas, le problème est que AJAX est asynchrone (c'est le premier A). Si vous faites une requête AJAX et essayez immédiatement d'utiliser le résultat de cette requête, vous ne trouverez pas de résultat. C'est parce que la requête AJAX n'est pas encore retournée. Vous devrez à la place travailler avec le résultat dans le rappel de la requête AJAX.

0
window.cells=new Array(); 

dans la portée globale.

Questions connexes