3

我正在编写一个 Web 应用程序,需要初始化一些我通过 $.getJSON() 方法提取的参数。

$.getJSON("../config/", function(data)
{
     console.debug(data);
}

现在,由于这些值将在整个脚本中全局使用,并且不会直接触发事件(这是我在文档中可以找到的 $.getJSON() 的唯一实现),我如何返回或检索此回调数据?

4

2 回答 2

17

你最好的选择是坚持回调技术。

有两种真正的方法可以使它工作,两者本质上是相同的。

$.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 行之前执行。

于 2009-07-12T01:48:02.943 回答
3

Kent Fredric:我不确定你的方法是否会更好,所以如果你的方法更好,请告诉我如何,我会接受你的解决方案而不是我自己的解决方案,但这就是我的做法:

 var my_data = null;

$.ajax(
{
    url: "../config/",
    dataType: "json",
    async: false,
    success: function(data)
    {
        my_data = data;
    }
});

还要感谢 RichieHindle,我不知道可以在函数之外替换变量而不返回。

于 2009-07-12T01:57:18.393 回答