2

エラー ページ テンプレート (Google アナリティクス風) にコピー アンド ペーストされるコード スニペットを介して、Web アプリのエラー ページを支援するサービスを作成しました。ステータス コードは、インストール コード内の非表示の入力に設定されます。問題は、インストール コードをサーバー側の言語 (PHP、Ruby など) に依存させたくないということです。ハード コードされたステータス コードと、そのため、エラー ページごとに個別のインストール コードが必要です (ただし、実際には 500 と 404 のみを調べていますが、私の知る限り、1 つのオプションは多すぎます)。

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

私の知る限り、ページに埋め込まれたコードを使用して、ページ自体のステータスコードを把握する方法はありません。(URLへのAjaxリクエストはステータスコードを返すので、理論的には現在のページへのAjaxリクエスト(つまり2回リクエスト)を行うことができますが、ページの読み込みごとにそれを行う必要がある場合は少し厄介です...)

唯一の解決策は、サーバー側の404、500などのハンドラーを提案および変更して、ページ自体にステータスコードに関する情報を埋め込み(たとえば<script>document.status = "404";</script>)、JavaScriptで抽出できるようにすることだと思います。

于 2009-11-22T17:53:04.483 に答える
1

XmlHttpRequestを使用すると、使用しているサーバー言語から独立した、サーバー上にあるテキスト/プレーンファイルのコンテンツを取得できます。

これは、値がコンマまたはセミコロンで区切られたテキストファイルである可能性があり、リクエストが完了すると分割されます。

注:XmlHttpRequestのresponseTextプロパティを使用する必要があります。

私が十分に明確であることを願っています。

于 2009-05-23T20:10:05.470 に答える
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 に答える