jQuery.getJSON()
方法似乎忽略了JavaScript中的范围规范。
给出这样的代码......
someObject = {
someMethod: function(){
var foo;
$.getJSON('http://www.somewhere.com/some_resource', function(data){
foo = data.bar;
});
alert(foo); // undefined
}
}
someObject.someMethod();
是否有最佳实践来访问getJSON范围之外的变量值?
答案 0 :(得分:2)
您的代码的问题是在JSON请求返回后(在回调函数中)设置了foo。将警报移动到回调中可以解决问题。
范围方面,代码很好。因为javascript有闭包,回调函数可以访问周围的上下文(包括foo变量)。因此,当您设置foo时,您将设置相同的变量。
答案 1 :(得分:0)
这不是getJSON()
的一些奇怪的特色。这是完全正常的JS行为 - 毕竟你正在使用回调函数。回调完全分离并与它们已定义的上下文分开。
最好是你在回调中处理所有事情:
someObject = {
someMethod: function(){
$.getJSON('http://www.somewhere.com/some_resource', function(data) {
var foo = data.bar;
alert(foo);
});
}
}