【问题标题】:Getting data from the $.getJSON() method从 $.getJSON() 方法获取数据
【发布时间】:2011-12-02 05:17:30
【问题描述】:

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

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

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

【问题讨论】:

  • 我不明白你的问题,$.getJSON 第二个参数是一个回调函数,一旦请求完成并成功就会调用它。
  • 你想对来自 getJSON 的数据做什么?

标签: javascript jquery getjson


【解决方案1】:

最好的办法是坚持使用回调技术。

有两种真正的方法可以让它发挥作用,两者本质上是一样的。

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

【讨论】:

  • 保护所有关于同步请求的警告,如果你真的需要这样做,你需要使用“较低级别” $.ajax({ ... , dataType: "json “,异步:假)}。在上面的示例中,这将保证 #3 在 #5 之前执行。
【解决方案2】:

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

 var my_data = null;

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

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

【讨论】:

  • 同步请求会阻塞浏览器,因此在服务器超时的情况下,浏览器可能会挂起……无限期。当同步请求发生时,页面不会响应用户输入。
  • @Kent:他们不会阻止我的浏览器。同步请求和正常的标准页面加载没有区别;如果您通过 AJAX 提取的数据很关键,我认为没有理由避免同步请求——您可能不希望用户在这段时间内提供输入!
  • 我只是直接从文档中获取:“请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作。” api.jquery.com/jQuery.ajax 是的,有一点不同,同步请求的工作方式类似于内联
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 2018-10-24
  • 2017-11-18
  • 2014-07-12
相关资源
最近更新 更多