javascript - 递归javascript/ajax函数: unable to access global variable set inside function

标签 javascript ajax recursion

在我的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

如果我再次调用树函数,它将工作更深的一个“级别”,然后再次给出错误,等等

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

谢谢 James Montagne,正如您所指出的,问题是我需要等待 ajax 请求返回。再次感谢!

最佳答案

我在这里根据变量名称做出一些假设,但我认为

ajaxCity.displayCell(topCell);

将进行 ajax 调用,其结果将是创建 window.cells...

如果是这种情况,问题就在于 AJAX 是异步的(即第一个 A)。如果您发出 AJAX 请求,然后立即尝试使用该请求的结果,您将找不到结果。这是因为 AJAX 请求尚未返回。您将需要在 AJAX 请求的回调中处理结果。

关于javascript - 递归javascript/ajax函数: unable to access global variable set inside function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8734897/

相关文章:

javascript - 如何使用 Deck.gl 显示多个图层

javascript - Redux Saga 错误 : takeLatest$1 requires a pattern or channel

javascript - 刷新后 socket.io 客户端多次监听同一事件

php - 为 AJAX-PHP-MySQL 生成的表创建动态 Div 标签

有人可以解释一下这种递归是如何工作的吗?

javascript - 如何防止以下映射函数返回 undefined object ?

javascript - 带有 ES6 的 jQuery ajaxSetup

JavaScript 与无 JavaScript 链接和表单

Javascript - 计算 JSON 的所有嵌套对象

返回递归函数的 Javascript 闭包