获取AJAX响应正文以用于错误callback
jQuery的AJAX错误函数有以下参数:
error(XMLHttpRequest, textStatus, errorThrown)
什么是最好的跨浏览器方式来获得响应主体?
这是否工作(在所有浏览器中可靠)?
$.ajax({ error: function(http) { alert(http.responseText); } });
有一个隐藏的function可以从XHR中提取数据:
var responseText = $.httpData(xhr)
如果你传递"json"
作为第二个参数,它将把响应视为一个JSONstring。
请注意,您可能会遇到错误,因为没有响应(例如networking问题)。 确保你也覆盖了这种情况。 另外,我相信(不知道),如果服务器返回4xx
或5xx
状态,jQuery调用error
处理程序。
从jQuery 1.4.1开始,你应该使用:
var json = $.parseJSON(xhr.responseText);
对于更新和一般的答案(自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 在这里