2009-08-06 10 views
1

私はいくつかのウェブサイトのステータスを監視するために、主にちょうどどのウェブサイトがオンラインでどのウェブサイトであるかを報告するために使用される小さなアプリケーションを書いていますオフラインです。ウェブサイトへのAJAX要求の実行中、またはダウンしている可能性があります

私は現在 onreadystatechangeに関数として、このコードを持っている:

if(xmlhttp.readyState == 4) { 
    if (xmlhttp.status == 200) { 
     element(id).innerHTML = "Online"; 
    } 
    else { 
     element(id).innerHTML = "Offline"; 
    } 
} 

ウェブサイトがオンラインであるとき、それは適切に動作しますが、私はウェブサイト上でAJAXリクエストをすれば、それは「他」ブロックに達することはありませんそれはオフラインです..私は、リクエストがWebサイトがダウンしている場合、readyState 4に達しないと思っていますか?

オフラインのWebサイトにAJAXリクエストを取得する方法についてのご意見はありますか?

+0

代わりに、各ページに非表示のIFRAMEを指し、それぞれにonloadおよびonerrorイベントハンドラを配置する方法があります。 – EricLaw

答えて

1

あなたがしたいことは、一定の時間が経過した後にリクエストを中止することです。すなわち、タイムアウトです。

Async Requests over an Unreliable Network

+0

ええ、調査しましたが、オフラインのリソースにAJAXリクエストを行うと、readyStateは決して4に達しません。リクエストを中止するまで、1にとどまります。 – ampersandre

0

私はちょうど今Fiddlerを使用してテストし、それはあなたが404エラーのヘッダを確認することができますステータス502、ボディ512

+0

ええ、私のelseブロックは200ではないものをキャッチする必要があります。何らかの理由でそれがありません – ampersandre

+0

サーバーに到達できない場合、502はプロキシによって生成されます。プロキシがない場合は、502はありません。 – EricLaw

-1

を返しました。

+0

サーバが404を返すことがないので、ダウンしたサーバから404を取得しません。 – EricLaw

+0

ああ良い点です。 – RiddlerDev

1

IE8のXHRオブジェクトは、コンテンツがロードされない場合には発生しません(http://msdn.microsoft.com/en-us/library/cc197061(VS.85).aspx

はreadyStateの= 4「ロードされた」という意味OnTimeoutパスイベントをサポートしています。ここで助けるべき記事です。

関連する問題