2

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

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

4

4 回答 4

2

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

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

于 2009-11-22T18:11:37.777 回答
1

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

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

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

希望我足够清楚。

于 2009-05-23T20:10:05.470 回答
1

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

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

于 2009-11-22T17:53:04.483 回答
0

尼尔。

这里有一些代码来澄清。

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); 
于 2009-05-25T19:21:33.687 回答