2009-05-23 4 views
2

私は、エラーページテンプレートにコピー/ペーストされたコードのスニペットを使ってWebアプリケーションのエラーページを支援するサービスを作成しましたGoogleアナリティクス)。ステータスコードは、インストールコード内の隠れた入力に設定されています。問題は、インストールコードをサーバー側の言語(PHP、Rubyなど)に依存させたくないということです。しかし、アプリケーションは実際にはHTTPリクエストでステータスコードを収集する動的な方法を実際に使用する可能性がありますハードコーディングされたステータスコードとなるため、エラーページごとに別々のインストールコードが必要になります(ただし、実際には500s & 404sしか見ていませんが、1つのオプションは多すぎます)。サーバー側の言語を使用しない状況コードを取得する(JavaScript、おそらく?)

Googleと私の開発者の友人は、ステータスコードをjavascriptで取得することはできないと示唆していますが(私たちはhttp_refererをそうした方法で取得しています)、私は誰にも提案していないまだ届いていません...

答えて

1

XmlHttpRequestを使用すると、使用しているサーバー言語から独立したサーバー上のtext/plainファイルの内容を取得できます。

これは、値がカンマまたはセミコロンで区切られたテキストファイルで、要求が完了すると分割されます。

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

私は十分にはっきりしています。

+0

Thanks SleepyCod。 XmlHttpRequestは私にとって初めてのものです。 私は、隠された入力の値にXmlHttpRequest.reponseTextを割り当てるDOMにjavascriptインクルードがあると仮定していますか? 次のメソッドを使用してhttpリファラーを取得しています(XmlHttpRequest.responseTextを同じ方法で割り当てることができるかどうかは疑問です)。

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

私の知る限り、ページに埋め込まれたコードを使用してページ自体のステータスコードを把握する方法はありません。 (URLへのAjaxリクエストはステータスコードを返すので、理論的にはあなたがいるページへのAjaxリクエスト(つまり2回のリクエスト)が可能ですが、すべてのページロードでそれを行う必要がある場合はちょっと変なことです...)

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

2

HTMLページまたはJavaScript関数からHTTPステータスコードにアクセスする方法はありません。 XMLHttpRequestは、独自に作成したHTTP要求を認識しているため、XMLHttpRequestにアクセスできます。これは最初のHTTP接続の発信者です。しかし、実行したいJavaScriptコードは既にロードされているページに含まれています。とにかくレイヤー(トランスポートレイヤーやアプリケーションレイヤーなど)を混在させることになります。たとえば、ファイルシステムから.htmlページを読み込むことができるので、この場合のHTTPステータスコードは何ですか?または、FTPサーバーまたはSVNリポジトリからHTMLページにアクセスしている場合は、HTTPステータスコードは何ですか?

関連する問題