jQuery:处理 getJSON() 中的错误?

Posted

技术标签:

【中文标题】jQuery:处理 getJSON() 中的错误?【英文标题】:jQuery: handle errors in getJSON()? 【发布时间】:2011-07-20 07:46:11 【问题描述】:

使用 jQuery 的 getJSON 时如何处理 500 错误?

关于getJSON() and JSONP 的错误处理有几个问题,但我没有使用 JSONP,只是使用普通 JSON。

Another answer 建议在调用getJSON() 之前使用.ajaxSetup(),所以我尝试了这个:

$.ajaxSetup(
  "error":function()    
    alert('Error!');
);
$.getJSON('/book_results/', function(data)  # etc

但我发现警报总是会触发,即使结果格式正确。

有什么想法吗?

【问题讨论】:

你能举例说明返回什么并触发警报吗? 它会触发“错误”功能,因为它不存在,而你只是做了一个 :) @Bob - 谢谢 - 是什么造成了错误? :) 在这种情况下,您正在创建一个名为 error 的函数。但真正的错误是什么,我不知道,因为我没有你的文件:) 谢谢你的标记,希望你能找到你的错误! 【参考方案1】:

getJSON 方法本身不会返回错误,但您可以深入了解在回调中作为参数返回的 xhr 对象。

getJSON 方法是jQuery.ajax 的简写函数。使用jQuery.ajax可以轻松实现错误处理:

  $.ajax(
    url: 'http://127.0.0.1/path/application.json',
    dataType: 'json',
    success: function( data ) 
      alert( "SUCCESS:  " + data );
    ,
    error: function( data ) 
      alert( "ERROR:  " + data );
    
  );

【讨论】:

【参考方案2】:

如果您使用 jquery 1.5 或更高版本,您可以使用新方法 .success(function)、.error(function) 和 .complete(function)

来自http://api.jquery.com/jQuery.get/的示例

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.get("example.php", function() 
  alert("success");
)
.success(function()  alert("second success"); )
.error(function()  alert("error"); )
.complete(function()  alert("complete"); );

// perform other work here ...

// Set another completion function for the request above
jqxhr.complete(function() alert("second complete"); );

非常适合我。我希望这会有所帮助

【讨论】:

【参考方案3】:

你可以在 jquery api getJSON 上看到它:http://api.jquery.com/jQuery.getJSON/

$.getJSON(url).done(function(data)
   $("#content").append(data.info);
)
.fail(function(jqxhr)
   alert(jqxhr.responseText);
);

//jquery1.5+ 当文本不是正确的 json 字符串或任何其他失败解决方案时,将触发失败回调

【讨论】:

【参考方案4】:

使用 jQuery 3.2.1:

$.getJSON('/api/feed/update', function (data) 
    console.log(data);
).catch(function (jqXHR, textStatus, errorThrown) 
    console.error(jqXHR);
    console.error(textStatus);
    console.error(errorThrown);
);

【讨论】:

【参考方案5】:

请执行以下操作。伪代码:

$.getJSON('/path/to_your_url.do?dispatch=toggle&'  + new Date().getTime(),    function(data, status, xhr)

    if( xhr.status == 200 )
      // all good and do your processing with 'data' parameter( your response)
    else  
      //error - check out the values for only in chrome for 'console'
     console.log(xhr.status);
     console.log(xhr.response);
     console.log(xhr.responseText)
     console.log(xhr.statusText);
    

【讨论】:

以上是关于jQuery:处理 getJSON() 中的错误?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery getJSON 的“无效标签”Firebug 错误

使用 JSONP 时如何捕获 jQuery $.getJSON(或数据类型设置为“jsonp”的 $.ajax)错误?

在 jQuery 中将 JSON 数据传递给 .getJSON?

jquery .getJSON 跨域请求 报 Url错误 。callback=?用与跨域的参数,急啊 高手帮忙解决一下。

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

如何使用 jquery 处理从 jsonp 返回的 xml?