如何从jQuery.ajax获取响应状态代码?

在下面的代码中,我所要做的就是从jQuery.ajax调用中获取HTTP响应代码。 然后,如果代码是301(永久移动),则显示“位置”响应标题:

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>jQuery 301 Trial</title> <script src="http://code.jquery.com/jquery-1.5.1.min.js"></script> <script type="text/javascript"> function get_resp_status(url) { $.ajax({ url: url, complete: function (jqxhr, txt_status) { console.log ("Complete: [ " + txt_status + " ] " + jqxhr); // if (response code is 301) { console.log ("Location: " + jqxhr.getResponseHeader("Location")); // } } }); } </script> <script type="text/javascript"> $(document).ready(function(){ $('a').mouseenter( function () { get_resp_status(this.href); }, function () { } ); }); </script> </head> <body> <a href="http://ow.ly/4etPl">Test 301 redirect</a> <a href="http://cnn.com/not_found">Test 404 not found</a> </body> </html> 

有人能指出我要去哪里吗? 当我检查Firebug中的'jqxhr'对象时,我找不到状态码,也没有'Location'响应头。 我在“完成”的最后一行设置了断点。

非常感谢。

我在jqXhr对象上看到状态字段,这里是一个小工具:

http://jsfiddle.net/magicaj/55HQq/3/

 $.ajax({ //... success: function(data, textStatus, xhr) { console.log(xhr.status); }, complete: function(xhr, textStatus) { console.log(xhr.status); } }); 

当您的XHR请求返回redirect响应(HTTP状态301,302,303,307)时, XMLHttpRequest 自动遵循redirect的URL并返回该URL的状态码 。

您可以通过xhr对象的status属性获取非redirect状态码(200,400,500等)。

因此,您无法从303307请求的响应头中获取redirect的位置。

你可能不得不改变你的服务器逻辑来响应,你可以处理redirect,而不是让浏览器去做。 一个示例实现 。

遇到这个老线索我自己寻找一个类似的解决scheme,并find了使用jquery ajax .complete()方法的公认的答案。 我在这里引用jquery网站上的通知:

从jQuery 1.8开始, 不推荐使用 jqXHR.success(),jqXHR.error()和jqXHR.complete()callback。 要准备好代码以便最终删除它们,请改用jqXHR.done(),jqXHR.fail()和jqXHR.always()

要知道ajax响应的status code ,可以使用下面的代码:

 $.ajax( url [, settings ] ) .always(function (jqXHR) { console.log(jqXHR.status); }); 

.done().fail()类似地工作

使用传递给$ .ajax函数的参数对象的statusCode属性可能更习惯于使用jQuery:

 $.ajax({ statusCode: { 500: function(xhr) { if(window.console) console.log(xhr.responseText); } } }); 

然而,正如利文斯顿塞缪尔所说,不可能在javascript中捕捉301个状态码。

你可以检查你的答复内容,只是console.log它,你会看到属性有一个状态码。 如果您不了解jsons,请参阅以下video: https : //www.youtube.com/watch?v = Bv_5Zv5c-Ts

它解释了非常基本的知识,让你感觉更舒适的JavaScript。

你可以用较短版本的ajax请求来实现,请参阅上面的代码:

 $.get("example.url.com", function(data) { console.log(data); }).done(function() { // TO DO ON DONE }).fail(function(data, textStatus, xhr) { //This shows status code eg. 403 console.log("error", data.status); //This shows status message eg. Forbidden console.log("STATUS: "+xhr); }).always(function() { //TO-DO after fail/done request. console.log("ended"); }); 

控制台输出示例:

 error 403 STATUS: Forbidden ended 

jqxhr是一个json对象:

完整的回报:
jqXHR(在jQuery 1.4.x中,XMLHTTPRequest)对象和一个将请求状态(“success”,“notmodified”,“error”,“timeout”,“abort”或“parsererror”)分类的string。

请参阅: jQuery ajax

所以你会这样做:

jqxhr.status获取状态