jQuery getJSON 函数

Posted

技术标签:

【中文标题】jQuery getJSON 函数【英文标题】:JQuery getJSON function 【发布时间】:2010-12-09 06:07:57 【问题描述】:

我正在使用以下代码获取使用 twitter api 的 twitter 用户朋友的 json 提要:

var url = "http://twitter.com/statuses/friends/"+twitter_handle+".json?callback=?";

//show ajax loading animation
$('#loading').show();

$.getJSON(url, function(data) 
   //hide ajax loading animation 
   $('#loading').hide();
   //Processing the JSON here
   //...
); 

这在推特句柄有效时有效。但如果它无效,即当不存在这样的twitter用户时,我定义的回调函数不会被执行,并且ajax加载动画不会被隐藏。

那么,有没有办法在代码中确定对 json 提要的请求是否失败,然后隐藏加载动画?

谢谢。

【问题讨论】:

【参考方案1】:

ccallback 可以返回 2 个参数,其中一个是您可以测试的 textStatus。

$.getJSON(url, function (data, textStatus) 
  // data will be a jsonObj
  // textStatus will be one of the following values: 
  //   "timeout","error","notmodified","success","parsererror"
  this; // the options for this ajax request

通过:http://docs.jquery.com/Ajax/jQuery.getJSON

【讨论】:

据我所知,这实际上不起作用:成功时, textStatus 为空;失败时,该函数甚至不会被调用【参考方案2】:

您没有发现错误情况。从下面的示例中,您可以使用 if 语句或 switch 来处理这两种情况。

http://docs.jquery.com/Ajax/jQuery.getJSON 说:

回调(可选)函数 数据加载成功时执行的函数。

function (data, textStatus) 
  // data will be a jsonObj
  // textStatus will be one of the following values: 
  //   "timeout","error","notmodified","success","parsererror"
  this; // the options for this ajax request

编辑 工作示例感谢jQuery ajax (jsonp) ignores a timeout and doesn't fire the error event。

        var twitter_handle = 'FakePersonx';
        var url = "http://twitter.com/statuses/friends/"+twitter_handle+".json?callback=?";

        $.jsonp(
            type: "GET",
            url: url,
            data: ,
            async:true,
            contentType: "application/json; charset=utf-8",
            dataType: "jsonp",
            success: function(data) 
                alert(data);
            ,
            error: function (XMLHttpRequest, textStatus, errorThrown) 
                alert('error');
            ,
            beforeSend: function (XMLHttpRequest) 
                alert('Before Send');
                $('#loading').show();
            ,
            complete: function (XMLHttpRequest, textStatus) 
                alert('Complete');
                $('#loading').hide();
            
);

【讨论】:

感谢 Tony 的回复,但我不清楚将 textStatus 参数添加到回调函数有什么帮助,因为如果数据未成功加载,该函数将不会被执行。那么如何检查 textStatus 变量的值呢?能否请您展示一些 sn-p 来演示...谢谢。 显然jquery处理jsonp的方式有问题。感谢这里的 José Basilio:***.com/questions/1002367/… 我将用一个工作示例编辑我的帖子。

以上是关于jQuery getJSON 函数的主要内容,如果未能解决你的问题,请参考以下文章

JQuery getJson 成功函数在按钮单击时触发

jQuery getJSON 函数

详细解读Jquery各Ajax函数: $.get(),$.post(),$.ajax(),$.getJSON()

如何将表头添加到使用 jQuery 中的 getJSON() 函数创建的 html 表中

jQuery.getJSON(url, [data], [callback])

jQuery:请求 getJSON + SunlightLabs API 帮助