我目前正在使用以下代码检查当前页面的状态代码:
$.ajax({
type: 'HEAD',
url: window.location.href,
success: function() {
console.log("Ok");
},
error: function() {
console.log("error");
}
});
如果响应代码介于200 - 299之间,如果响应的代码介于400 - 499之间,则该页面存在。
但是例如405错误对我来说并不是一个错误,页面显示得很好,所以没有理由处于错误状态。
所以我又添了一个测试:
error: function(jqXHR, textStatus, errorThrown) {
console.log('jqHRX : ' + JSON.stringify(jqXHR) + ' textStatus : ' + textStatus + ' errorThrown : ' + errorThrown);
if (errorThrown != "OK") //or jqHRX.statusText
console.log("error");
}
例如,如果我浏览到返回405代码的页面,我将输出以下内容:
jqHRX : {"readyState":4,"responseText":"","status":405,"statusText":"OK"} textStatus : error errorThrown : OK
如果是404错误:
jqHRX : {"readyState":4,"responseText":"","status":404,"statusText":"Not Found"} textStatus : error errorThrown : Not Found
error
谢谢!
亚历
编辑:例如,https://developer.chrome.com/home使用我的代码返回405,但在我的应用程序中,没有必要将此视为错误。
奇怪的是,您可以使用http://tools.seobook.com/server-header-checker/验证statusCode:结果为405 但如果您使用http://httpstatus.io/查看结果为200
答案 0 :(得分:1)
来自jQuery文档:
“发生HTTP错误时,errorThrown会收到HTTP状态的文本部分,例如”Not Found“或”Internal Server Error“。
依赖于此并不是最佳选择,因为服务器可以为您提供他们认为正确的任何statusText。所以我基本上可以给你发送一个500页的错误,我知道“我知道foo比bar更好”。
405页面也不应该“显示良好”,因为此错误意味着此页面上不允许使用HTTP方法。通常在您尝试获取仅适用于POST,PUT,PATCH的端点时看到。
如果您有非标准的错误处理(您不会将405之类的错误视为应用程序内部的错误),请使用响应状态代码而不是其他任何内容。您还可以考虑使用jQuery.ajax().complete()在一个地方处理成功和错误。
答案 1 :(得分:1)
tl; dr :使用 GET 代替 HEAD 将有效。 Get实际上是不允许抛出405错误的方法。
回答: 感谢我的一位同事,它向我展示了Postman。
它允许我通过不同的方法检查页面的状态代码,如GET,PUT,POST,HEAD,LOCK等。看来,对于一堆网站(chrome开发者文档,亚马逊等),HEAD返回405而GET返回200
根据w3.org
HEAD方法与GET相同,只是服务器不能在响应中返回消息体。
所以在我的情况下,有时我发现网站不允许HEAD请求。
通过以下方式重新提交代码解决:
$.ajax({
type: 'GET',
url: window.location.href,
error: function() {
console.log("error");
}
});