获取AJAX响应正文以用于错误callback

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

error(XMLHttpRequest, textStatus, errorThrown) 

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

这是否工作(在所有浏览器中可靠)?

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

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

 var responseText = $.httpData(xhr) 

如果你传递"json"作为第二个参数,它将把响应视为一个JSONstring。

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

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

 var json = $.parseJSON(xhr.responseText); 

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

对于更新和一般的答案(自jquery 1.5以来),我会使用jqXHR对象:

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

或者,可以使用responseJSON来获得已经parsing的响应主体

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

一个简单的jQuery使用示例:

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

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

然后尝试input一个不存在的废话URL并查看抛出的错误。 你应该从Web服务器得到“404 Not Found”。 testing一下:JSFiddle 在这里