2012-01-04 4 views
0

В моем приложении ajax я пытаюсь использовать рекурсивную функцию, внутри которой вызывается другая функция, которая создает глобальную переменную, и я хочу использовать эту переменную внутри рекурсивной функции. Однако я столкнулся с трудностями, потому что не могу получить доступ к этой глобальной переменной внутри рекурсивной функции (хотя она доступна, если я сама вызываю эту функцию). Код для рекурсивной функции приведен ниже.Рекурсивная функция javascript/ajax: не удается получить доступ к глобальной переменной, установленной внутри функции

ajaxCity.displayCell() устанавливает переменную window.cells [], которая содержит массив чисел. Идея состоит в том, чтобы вызвать функцию tree() для каждого из этих чисел.

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]); 
    } 
} 

window.cells [] переменная доступна после я запустить функцию один раз, но как я должен изменить процесс так, что он работает так, как я воображая?

Благодарим за помощь!

Редактировать: вот ошибка, которую я получаю.

TypeError: window.cells[topCell] is undefined 

если я снова вызвать функцию дерева, она будет работать на один «уровень» глубже, а затем дать ошибку снова и т.д.

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

Спасибо, Джеймс Монтань, как вы указали, проблема в том, что мне нужно дождаться, когда запрос ajax вернется. Еще раз спасибо!

ответ

2

Я делаю некоторые предположения здесь на основе имен переменных, но я считать, что

ajaxCity.displayCell(topCell); 

сделает АЯКС вызов, результат которого будет создание window.cells....

Если это так, проблема в том, что AJAX является асинхронным (это первый A). Если вы сделаете запрос AJAX, а затем сразу попытаетесь использовать результат этого запроса, вы не найдете результата. Это связано с тем, что запрос AJAX еще не вернулся. Вам нужно будет вместо этого работать с результатом в обратном вызове запроса AJAX.

0
window.cells=new Array(); 

в глобальном масштабе.

Смежные вопросы