【问题标题】:Grabbing status code without using a server-side language (javascript, perhaps?)在不使用服务器端语言的情况下获取状态代码(也许是 javascript?)
【发布时间】:2010-10-28 10:12:32
【问题描述】:

我创建了一项服务,该服务通过复制/粘贴到错误页面模板的代码 sn-p 来帮助处理网络应用程序中的错误页面(例如 Google Analytics)。状态代码设置为安装代码中的隐藏输入。问题是我不希望安装代码依赖于服务器端语言(例如 PHP、Ruby)——但应用程序可以真的、真的使用动态方法来收集 http 请求中的状态码,而无需硬编码状态代码,因此,每个错误页面都需要单独的安装代码(虽然,我们实际上只查看 500 和 404;但就我而言,一个选项太多了)。

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

【问题讨论】:

    标签: javascript status http-status-codes


    【解决方案1】:

    使用 XmlHttpRequest,您只需检索位于服务器上的文本/纯文本文件的内容,该文件将独立于您使用的服务器语言。

    这可以是一个文本文件,其值由逗号或分号分隔,一旦请求完成,您将对其进行拆分。

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

    希望我已经足够清楚了。

    【讨论】:

    • 感谢 SleepyCod。 XmlHttpRequest 对我来说是新的。我是否正确地假设 DOM 中包含一个 javascript,它将 XmlHttpRequest.reponseText 分配给隐藏输入的值?使用以下方法获取 http 引用(我想知道 XmlHttpRequest.responseText 是否可以以相同的方式分配;
    【解决方案2】:

    尼尔。

    这里有一些代码需要澄清。

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

    【讨论】:

      【解决方案3】:

      据我所知,没有办法使用嵌入在该页面上的代码来确定页面本身的状态代码。 (对 URL 的 Ajax 请求将返回状态代码,因此理论上您可以向您所在的页面发出 Ajax 请求(即请求两次),但如果您需要在每个页面加载时都这样做,那就有点古怪了...)

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2012-06-16
          • 2012-05-06
          • 2012-06-09
          • 2012-08-21
          • 2017-05-25
          • 1970-01-01
          • 2012-06-15
          • 2010-10-01
          • 2011-03-10
          相关资源
          最近更新 更多