获取AJAX响应主体以用于错误回调

时间:2010-01-18 07:29:55

标签: jquery ajax

jQuery的AJAX错误函数具有以下参数:

error(XMLHttpRequest, textStatus, errorThrown)

获得响应机构的最佳跨浏览方式是什么?

这是否有效(在所有浏览器中都可靠)?

$.ajax({
  error: function(http) {
    alert(http.responseText);
  }
});

4 个答案:

答案 0 :(得分:76)

从jQuery 1.4.1开始,你应该使用:

var json = JSON.parse(xhr.responseText);

请参阅http://api.jquery.com/jQuery.parseJSON/

答案 1 :(得分:20)

对于更近期和一般性的答案(因为jquery 1.5),我使用jqXHR对象:

$.ajax(url).fail(function(jqXHR, textStatus, errorThrown) {
    alert(jqXHR.responseText);
})

或者responseJSON可用于获取已解析的响应主体

$.ajax(url).fail(function(jqXHR, textStatus, errorThrown) {
    console.log(jqXHR.responseJSON);
})

答案 2 :(得分:1)

jQuery的一个直接用法示例:

var url = '/';
$.get(url).then(
  function(response) {
      $("#result").html(response);
  },
  function(jqXHR) {
    $("#result").html('Error occurred: '+ jqXHR.statusText + ' ' + jqXHR.status);
  }
); 

这应返回当前网站首页的HTML。

然后尝试输入一个不存在的无意义网址,并查看引发的错误。 你应该得到" 404 Not Found"来自网络服务器。测试它:JSFiddle here

答案 3 :(得分:-5)

有一个隐藏函数可以从XHR中提取数据:

var responseText = $.httpData(xhr)

如果您将"json"作为第二个参数传递,它会将响应视为JSON字符串。

请注意,您可能会收到错误,因为没有响应(例如网络问题)。确保你也覆盖了这种情况。另外,我相信(不确定)如果服务器返回error4xx状态,jQuery会调用5xx处理程序。