在JS/JSON函数内返回变量
问题描述:
我想了解JS中的JSON,回调等。从下面的更改示例中,您将看到我正在从$ .getJSON进行函数回调。然后,我跳入getSomething()并期望它改变我的结果变量。它在功能的范围内改变它,但不是当我跳出该功能时。在JS/JSON函数内返回变量
您将从2 console.log()中看到第一个显示正确,第二个显示不正确。我确定我的问题的答案与通过返回变量有关。回拨,但可以有人启发
我:)
谢谢!
CODE:
$.getJSON('/cart.js', function (cart, textStatus) {
var result = '';
result += 'Sample Stuff';
StackOverflow.getSomething(param1, param2, function(a, b) {
for(j=0; j < b.length; j++) {
if (b.options[j] != 'Default Title') {
if (a.options[j].name.indexOf("Color") > -1) {
result += b.options[j].name;
console.log(result); // <-- It comes out correct (Sample Stuff + b.options...)
}
}
}
});
console.log(result); // <-- It comes out incorrect, just (Sample Stuff)
});
答
我猜StackOverflow.getSomething()
运行的AJAX请求?因此,在AJAX请求完成之前,其回调内定义的内容(循环通过a
和b
)不会执行。会发生什么是StackOverflow.getSomething
被激发,然后console.log(result)
在您的代码结束后立即执行。到那时,StackOverflow.getSomething
的回调尚未运行,并且result
尚未更新。只记录“Sample stuff”。但是,当第二个console.log在AJAX请求(getSomething
)之后的回调中执行时,result
已更新并“正确”记录。
换句话说,执行顺序将是这个
- 集
result
到“样品东西” -
StackOverflow.getSomething()
火灾具有附接的回调函数 -
console.log(result)
日志“样品东西” AJAX请求
- ajax回调完成并触发其回调函数。
result
通过遍历a
和b
- 回调函数的
console.log(result)
日志result
感谢您的解释终值相应地更新。我想我可能已经假设了大部分,但仍然不知道如何让getSomething()中的“结果”与getJSON()绑定,以便在getJSON()的其余部分执行之前发生。 – 2010-07-30 20:28:40
如果你依赖'result'来正确getJSON的其余部分才能正常工作,那么你必须将其余的getJSON代码放入'StackOverflow.getSomething'的回调中:) – 2010-07-30 20:33:32