如何从JavaScript检测HTTP状态

如何从JavaScript检测HTTP状态,javascript,http,dom,Javascript,Http,Dom,我想在一个脚本中检测,这个脚本可以在我无法控制的范围内部署,该页面是以200、404还是500等HTTP状态交付的 这是不可能的,对吗?页面A可以是一个Javascript,它通过AJAX加载页面B并使用 document.write或在弹出窗口中,或无论如何 在这种策略中,您可以在AJAX处理程序中检查返回代码的成功/失败,并根据状态向输出窗口发送不同的内容 大多数Ajax库提供了一种检查返回代码的方法 例如,请参见Prototype.js中带有Ajax.Request的“transport.

我想在一个脚本中检测,这个脚本可以在我无法控制的范围内部署,该页面是以200、404还是500等HTTP状态交付的


这是不可能的,对吗?

页面A可以是一个Javascript,它通过AJAX加载页面B并使用 document.write或在弹出窗口中,或无论如何

在这种策略中,您可以在AJAX处理程序中检查返回代码的成功/失败,并根据状态向输出窗口发送不同的内容

大多数Ajax库提供了一种检查返回代码的方法


例如,请参见Prototype.js中带有Ajax.Request的“transport.status”,为什么javascript需要知道这一点?听起来,将其嵌入到自定义404页面上更有意义。不需要检测父页面的HTTP状态(我认为这是不可能的——可能在每次加载后对自己进行ajax调用,但这很愚蠢)。如果代码正在执行,那么它肯定是一个404,我最近发现了如何执行它(归功于:)

getAllResponseHeaders()--以字符串形式返回所有当前 正在使用的标题。 getResponseHeader(“headerLabel”)--返回
请求的标题

让页面对自身进行XMLHttpRequest(使用
location.href
document.URL
)并检查您获得的HTTP状态。对我来说似乎很方便。你为什么要做这样的事,我无法理解;)

我无法创建自定义404页面,因为脚本“被部署在我无法控制的范围内”-我没有生成HTML,404页面将不在我的站点上:)生成浏览器扩展并遇到相同的问题-如果当前URL为404,并且是某个站点上常见页面的拼写错误,我将尝试重定向到该页面。我选择AJAX解决方案,因为我不相信页面的删除状态会在第一次请求和第二次请求之间的毫秒内经常改变。听起来您使用transport.status的方法是正确的-理想情况下,我希望避免另一个HTTP请求,但也许这是唯一的办法?我没有足够的经验知道这是不是唯一的办法。如果使用我给出的答案,还需要遵守Javascript的安全模型,只从同一个站点获取页面。不过,这可以通过巧妙地使用代理来解决。是的,这是我最终选择的解决方案——此外,我提出了一个HTTP HEAD请求,以防止客户端将整个页面下载两次。我为什么要这么做?想想我为网站管理员编写的一个.js文件,安装在他们的网站上。这很危险,因为第二个请求可能会以意外的方式改变服务器(但会重复发布页面),等等。同样的请求可能会成功一次,但下一次失败。我很困惑,@EoghanM或我都没有提到POST。他甚至说他用了头。使用GET或HEAD应该是安全的,因为它们是幂等方法,并且不会产生副作用。“为什么要这样做?”-因为您的404页与另一页相同,并且您希望处理客户端上的小差异。;)我想在页面为404时设置
,因此我需要提前同步完成此操作。如果页面是200,速度会变慢,这很烦人。你可以查看页面内容,看看它是否包含诸如“未找到”或“错误”之类的短语,但这可能是你能做的最好的了。