在不使用服务器端语言(可能是javascript?)的情况下获取状态代码

在不使用服务器端语言(可能是javascript?)的情况下获取状态代码,javascript,status,http-status-codes,Javascript,Status,Http Status Codes,我已经创建了一个服务,通过复制/粘贴到错误页面模板中的代码片段,帮助处理web应用程序中的错误页面(谷歌分析)。状态代码设置为安装代码中的隐藏输入。问题是,我不希望安装代码依赖于服务器端语言(例如PHP、Ruby),但应用程序可以真正、真正地使用动态方法来收集http请求中的状态代码,而不需要硬编码状态代码,因此每个错误页都需要单独的安装代码(虽然,我们实际上只考虑500s&404s;但就我而言,一个选项太多了) 对Google和我的开发者朋友进行的测试表明,通过javascript获取状态代码

我已经创建了一个服务,通过复制/粘贴到错误页面模板中的代码片段,帮助处理web应用程序中的错误页面(谷歌分析)。状态代码设置为安装代码中的隐藏输入。问题是,我不希望安装代码依赖于服务器端语言(例如PHP、Ruby),但应用程序可以真正、真正地使用动态方法来收集http请求中的状态代码,而不需要硬编码状态代码,因此每个错误页都需要单独的安装代码(虽然,我们实际上只考虑500s&404s;但就我而言,一个选项太多了)


对Google和我的开发者朋友进行的测试表明,通过javascript获取状态代码是不可能的(不过,我们正是通过这种方式获取http_引用程序的)但是我想知道是否有人有我还没有遇到的任何建议…

使用XmlHttpRequest,您可以检索位于服务器上的文本/普通文件的内容,该文件将独立于您使用的服务器语言

这可能是一个文本文件,其值由逗号或分号分隔,请求完成后,您将拆分这些值

注意:您必须使用XmlHttpRequest的responseText属性

希望我说得够清楚。

尼尔

这里有一些代码需要澄清

function createXhrObject()
{
    if (window.XMLHttpRequest)
        return new XMLHttpRequest();

    if (window.ActiveXObject)
    {
        var names = [
            "Msxml2.XMLHTTP.6.0",
            "Msxml2.XMLHTTP.3.0",
            "Msxml2.XMLHTTP",
            "Microsoft.XMLHTTP"
        ];
        for(var i in names)
        {
            try{ return new ActiveXObject(names[i]); }
            catch(e){}
        }
    }
    return null; // not supported
}
xhr = createXhrObject();

xhr.onreadystatechange = function() 
{
    if(xhr.readyState == 4 && xhr.status == 200) 
    {
        document.getElementById('your_hidden_input').value = xhr.responseText;
    } 
}

xhr.open('GET', 'your_text_file.txt', true); 
xhr.send(null); 

据我所知,使用嵌入在页面上的代码无法计算页面本身的状态代码。(对URL的Ajax请求将返回状态代码,因此理论上,您可以向您所在的页面发送Ajax请求(即请求两次),但如果您需要在每次加载页面时执行此操作,则有点奇怪…)


我认为唯一的解决方案是按照您的建议,修改服务器端404、500等处理程序,以便在页面本身中嵌入有关状态代码的信息(例如
document.status=“404”
),然后可以使用JavaScript提取。

无法从HTML页面或JavaScript函数中访问HTTP状态代码。XMLHttpRequest可以访问它,因为它知道自己创建的HTTP请求。它首先是HTTP连接的发起人。但是JavaSc要运行的脚本代码包含在已加载的页面中


顺便说一句,这将混合层(例如传输层和应用层)无论如何。例如,既然您可以从文件系统加载.html页面,那么在这种情况下,HTTP状态码是什么?或者,如果您从FTP服务器或SVN存储库访问html页面,HTTP状态码是什么?

谢谢SleepyCod。XmlHttpRequest对我来说是新的。我是否正确地假设在将XmlHttpRequest.responseText分配给隐藏输入值的DOM?使用以下方法获取http引用程序(我想知道XmlHttpRequest.responseText是否可以以相同的方式分配;if(document.referer)document.getElementById('np_referer')。value=document.referer;