这仅适用于Chrome,而非FF:
var menu = new Array();
$.couch.db("foo").allDocs({
success: function(d) {
for(var i=0;i<=d.total_rows-1;i++){
menu.push(d.rows[i].id);
};
}
});
console.log(menu);
我可以在函数内部的console.log“菜单”,但不能在外面。这就像它失去了它的范围。有什么想法吗?
答案 0 :(得分:3)
一旦您收到来自$ .couch.db的回复,您的success
功能稍后会被调用,因此当您到达console.log(menu);
时,您仍会获得初始值。
答案 1 :(得分:0)
尝试声明var menu = [];
而非new Array()
- 它应该没有任何区别,但你永远不会知道。
另外,尝试将console.log(menu);
放入循环中,然后看看......哦,等等。
忘掉上面的内容,我只是重新阅读代码。
我很确定allDocs()
是一个异步函数。您在启动该功能后尝试访问结果,但在完成之前。所有依赖menu
的代码必须位于success
函数中。
答案 2 :(得分:0)
可能是你的函数异步工作,当你在函数外面的console.log(菜单)时它会显示菜单的原始状态。
例如,在jQuery中使用ajax函数时,您可以将参数“ async ”设置为 false ,以便将响应正确地分配给变量。
答案 3 :(得分:0)
问题是您正在将数据推送到回调内的菜单数组中。这意味着您的代码以某种方式执行:
但是,可能会出现在到达console.log()之前执行回调的情况......所以你真的在这里处理竞争条件。