Javascript array.push在FF中不起作用,但在Chrome中起作用。。。有什么想法吗?
这只适用于Chrome,不适用于FF:Javascript array.push在FF中不起作用,但在Chrome中起作用。。。有什么想法吗?,javascript,jquery,arrays,Javascript,Jquery,Arrays,这只适用于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); };
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);
var菜单=新数组();
$.coach.db(“foo”).allDocs({
成功:功能(d){
对于(var i=0;i您的success
函数,一旦您收到来自$.coach.db的响应,那么当您到达console.log(menu);
时,您仍然会得到初始值。尝试声明var menu=[];
而不是new Array()
,这应该不会有任何区别,但您永远不会知道
另外,尝试将console.log(menu);
放入循环中,然后看到……哦,等等
忘记以上,我只是重新阅读代码
我很确定allDocs()
是一个异步函数。您试图在启动函数后,但在函数完成之前访问结果。依赖菜单的所有代码都必须在成功
函数中。您的函数是否可以异步工作,以便在控制台.log(菜单)时在功能之外,它显示菜单的原始状态
例如,在jQuery中,当您使用ajax函数时,您可以将参数“async”设置为false,以便正确地将响应分配给变量。问题在于您正在将数据推送到回调中的菜单数组。这意味着您的代码执行方式如下:
创建新阵列
调用$.coach.db()执行某些操作(某个异步任务,导致执行流继续)
调用console.log(),它通常打印一个空数组,因为菜单是空的
$.coach.db()完成了它的业务,并调用了填充数组的“成功”回调
但是,在某些情况下,回调在到达console.log()之前执行…因此,实际上您正在处理一个竞争条件。您的代码看起来不错,应该可以像您预期的那样工作。成功
回调是否在到达底部的控制台.log
后执行?这可能只是由于竞争条件.javascript导致的时间问题(html5 web workers除外)不是多线程的,所以没有真正的竞争条件。谢谢你的回复。我想我应该考虑一下。我想不管在ajax调用中设置变量,以后会调用它,这都是一个有点糟糕的做法。谢谢你的帮助!!