如何从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等)。
因此,您无法从303
或307
请求的响应头中获取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
获取状态