Mah*_*esh 216 ajax jquery-1.5
在下面的代码中,我要做的就是从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>
Run Code Online (Sandbox Code Playgroud)
有人能指出我哪里错了吗?当我检查Firebug中的'jqxhr'对象时,我找不到状态代码,也找不到'Location'响应头.我在'完成'的最后一行设置了断点.
非常感谢.
Ada*_*res 208
我在jqXhr对象上看到了status字段,这里有一个小工具:
http://jsfiddle.net/magicaj/55HQq/3/
$.ajax({
//...
success: function(data, textStatus, xhr) {
console.log(xhr.status);
},
complete: function(xhr, textStatus) {
console.log(xhr.status);
}
});
Run Code Online (Sandbox Code Playgroud)
fac*_*ace 49
遇到了这个老线程,我自己寻找一个类似的解决方案,并找到了使用.complete()方法的公认答案jquery ajax.我在jquery网站上引用通知:
从jQuery 1.8开始,不推荐使用jqXHR.success(),jqXHR.error()和jqXHR.complete()回调.要准备最终删除的代码,请使用jqXHR.done(),jqXHR.fail()和jqXHR.always().
要知道status codeajax响应,可以使用以下代码:
$.ajax( url [, settings ] )
.always(function (jqXHR) {
console.log(jqXHR.status);
});
Run Code Online (Sandbox Code Playgroud)
同样适用于.done()和.fail()
Liv*_*uel 41
当您的XHR请求返回重定向响应(HTTP状态301,302,303,307)时,将XMLHttpRequest 自动跟随重定向的URL并返回该URL的状态代码.
您可以通过statusxhr对象的属性获取非重定向状态代码(200,400,500 等).
所以你不能从响应头重定向的位置301,302,303或307请求.
您可能必须更改服务器逻辑,以便能够处理重定向,而不是让浏览器执行此操作.一个示例实现.
rst*_*use 40
使用传递给$ .ajax函数的参数对象的statusCode属性可能是更惯用的jQuery:
$.ajax({
statusCode: {
500: function(xhr) {
if(window.console) console.log(xhr.responseText);
}
}
});
Run Code Online (Sandbox Code Playgroud)
然而,正如Livingston Samuel所说,不可能在javascript中捕获301状态代码.
Prz*_*icz 18
您可以检查您的respone内容,只需控制台.log,您将看到whitch属性有一个状态代码.如果您不了解jsons,请参阅视频:https://www.youtube.com/watch?v = VB_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");
});
Run Code Online (Sandbox Code Playgroud)
控制台输出示例:
error 403
STATUS: Forbidden
ended
Run Code Online (Sandbox Code Playgroud)
Sur*_*nta 11
注意:使用 jQuery 3.4.1
$.ajax({
url: URL,
success: function(data, textStatus, jqXHR){
console.log(textStatus + ": " + jqXHR.status);
// do something with data
},
error: function(jqXHR, textStatus, errorThrown){
console.log(textStatus + ": " + jqXHR.status + " " + errorThrown);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
333547 次 |
| 最近记录: |