繁体   English   中英

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

[英]Grabbing status code without using a server-side language (javascript, perhaps?)

我已经创建了一项服务,该服务通过将代码段复制/粘贴到错误页面模板中来帮助解决Web应用程序中的错误页面(例如Google Analytics(分析))。 状态代码设置为安装代码中的隐藏输入。 问题是我不希望安装代码依赖于服务器端语言(例如PHP,Ruby),但是该应用程序确实可以真正使用动态方法来收集http请求中的状态代码,而无需硬编码的状态代码,因此有必要为每个错误页面单独安装代码(尽管我们实际上只查看500s和404s;但是就我而言,一个选项太多了)。

对Google和我的开发人员朋友进行的测验表明,不可能通过javascript获取状态代码(不过,我们正在以这种方式获取http_referer),但是我想知道是否有人对我没有任何建议。 ..

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

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

据我所知,无法使用嵌入在页面上的代码来找出页面本身的状态码。 (对URL的Ajax请求将返回状态代码,因此从理论上讲,您可以对所在页面进行Ajax请求(即两次请求),但是如果您需要在每次加载页面时都这样做,那会有些古怪...)

我认为唯一的解决方案是按照您的建议进行操作,并修改服务器端404、500等处理程序,以将有关状态代码的信息嵌入页面本身(例如<script>document.status = "404";</script> ),然后可以使用JavaScript提取。

使用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); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM