处理不可用的页面(statusCode)

时间:2015-11-14 10:14:49

标签: ajax get http-status-codes head http-status-code-405

我目前正在使用以下代码检查当前页面的状态代码:

$.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

  1. 因此,所有包含errorThrown的页面都等于" OK"目前有哪些?我偶然发现了405的例子。所以我不知道它是否是一个孤立的案例。
  2. 有没有更好的方法来解决这个问题?
  3. 谢谢!

    亚历

    编辑:例如,https://developer.chrome.com/home使用我的代码返回405,但在我的应用程序中,没有必要将此视为错误。

    奇怪的是,您可以使用http://tools.seobook.com/server-header-checker/验证statusCode:结果为405 但如果您使用http://httpstatus.io/查看结果为200

2 个答案:

答案 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");
 }
});