2010-01-18 65 views
39

jQuery的AJAX错误函数具有以下参数:获得Ajax响应体在错误回调使用

error(XMLHttpRequest, textStatus, errorThrown) 

什么是最好的跨浏览器的方式来获得响应主体?

这项工作(可靠地在所有浏览器中)吗?

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

http.responseText适用于所有现代浏览器,并且所有4xx和5xx HTTP状态错误都会触发错误处理程序。 您可以通过检查可访问的HTTP状态代码来改变错误处理,如'http.status' – 2010-01-18 18:29:12

回答

-4

有一个隐藏的功能,可以从XHR istance提取数据:

var responseText = $.httpData(xhr) 

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

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

+4

谢谢。从源代码看,它看起来像'xhr.responseText'将适用于普通的HTML数据。 – 2010-01-18 18:05:01

+23

至少在jQuery 1.5.2中看起来'$ .httpData'函数已经不存在了。 – dowski 2011-04-29 16:06:22

+4

-1使用未记录的功能。 – rightfold 2015-03-18 09:48:54

67

在jQuery 1.4.1你应该使用:

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

http://api.jquery.com/jQuery.parseJSON/

+3

当然,确保内容类型实际上是JSON。 – 2012-05-04 21:53:04

+0

啊......是的。 :-) – dowski 2012-06-26 03:16:25

+2

它现在说:“从jQuery 3.0开始,不推荐使用$ .parseJSON。为了解析JSON字符串,请使用本机JSON.parse方法。” – JHS 2017-06-21 18:16:35

17

对于一个更近的和一般的答案(因为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); 
}) 
0

jQuery的一个简单使用示例:

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

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

然后尝试输入不存在的无意义URL并查看引发的错误。 您应该从Web服务器上获得“404 Not Found”。测试它:JSFiddle here