我正在编写一个 Web 应用程序,需要初始化一些我通过 $.getJSON() 方法提取的参数。
$.getJSON("../config/", function(data)
{
console.debug(data);
}
现在,由于这些值将在整个脚本中全局使用,并且不会直接触发事件(这是我在文档中可以找到的 $.getJSON() 的唯一实现),我如何返回或检索此回调数据?
我正在编写一个 Web 应用程序,需要初始化一些我通过 $.getJSON() 方法提取的参数。
$.getJSON("../config/", function(data)
{
console.debug(data);
}
现在,由于这些值将在整个脚本中全局使用,并且不会直接触发事件(这是我在文档中可以找到的 $.getJSON() 的唯一实现),我如何返回或检索此回调数据?
你最好的选择是坚持回调技术。
有两种真正的方法可以使它工作,两者本质上是相同的。
$.getJSON("../config/", function(data) {
SomeObject.config = data;
SomeObject.load(); # assuming load tells some-object that it now has data and to get cracking
});
或者
$.getJSON("../config/", function(data) {
SomeObject.load( data ); # SomeObject sets itself up and starts doing its thing
});
尝试以同步方式使用 $.getJSON(即:让它返回一个值)只会让您和使用您网站的人流泪和痛苦,因为同步连接有阻塞整个 UI 的趋势。:)
就目前而言,异步执行此类操作
var i = null; #1
$.getJSON("../config/", function(data) { #2
i = data; #3
}); #4
some_function_with(i); #5
行不通,因为第 5 行几乎可以保证在第 3 行之前执行。
Kent Fredric:我不确定你的方法是否会更好,所以如果你的方法更好,请告诉我如何,我会接受你的解决方案而不是我自己的解决方案,但这就是我的做法:
var my_data = null;
$.ajax(
{
url: "../config/",
dataType: "json",
async: false,
success: function(data)
{
my_data = data;
}
});
还要感谢 RichieHindle,我不知道可以在函数之外替换变量而不返回。