4
url = "http://example.com"
new Ajax.Request(url, {
  onComplete: function(transport) {
    alert(transport.status);
  }
});

サイトが機能している場合は 200 のステータスを返し、機能していない場合は 500 などを返したいのですが、そのコードは常に 0 を返しています。

最終的には、Web サイトの稼働状況を定期的に ping する setinterval 関数が必要です。

4

6 に答える 6

7

JQuery を使用すると、あなたが持っているものと同様のコードでステータスを取得する必要があり、次のようになります。

$.ajax({
  url: 'some.url.com',
  type: 'POST',
  complete: function(transport) {
     if(transport.status == 200) {
         alert('Success');
     } else {
         alert('Failed');
     }
  }
 });

また、プロトタイプを使用する場合は、コードにこれだけを追加する必要があります。

      onXYZ:function(transport){
      }

上記のテキストで、XYZ は、応答用にキャッチする http ステータス コードに置き換える必要があります。

お役に立てれば

于 2009-07-16T21:50:32.653 に答える
4

Ajax ライブラリ自体は「ステータス コードを返す」わけではありません。そのコードは、サーバーからの応答で返される HTTP 応答コードです。ステータス コード 200 は成功を示します。404 は「見つかりません」などを示します。

応答コード 0 は、要求が試行されていないことを意味する可能性があります。リクエスト URL は、ページの送信元と同じドメイン (該当する場合はサブドメイン) の下にありますか? そうでない場合は、スクリプトが任意のリクエストを作成することを防止する同一オリジン ポリシーで問題が発生している可能性があります。

これを回避するには、サーバー側でデータをプロキシする必要があります。たとえば、スクリプト/フレームワーク ハンドラー/Web 要求を実行し、データをクライアントに戻すものを使用します。リモート データ ソースの代わりに「ローカル」プロキシを呼び出します。

于 2009-07-19T01:14:59.340 に答える
2

プロトタイプにはonXYZ コールバックがあります。次に例を示します。

new Ajax.Request(url, {
  method: 'get',
  on500: function(transport) {
    alert("failed!");
  },
  onSuccess: function(transport) { 
    alert("success!");
  }
});

ただし、Web サイトがダウンしている (到達できないなど) 場合、500 エラーは返されないため、このアプローチは初心者にはあまり適していません。

于 2009-07-16T21:36:51.277 に答える
2

サーバー側のプロキシ ファイルを作成してステータス コードを渡すことで、リモート ドメインを機能させることができました。この投稿のコードを使用して、ページのステータス コードを Web リクエスト ステータス コードに設定するだけの asp.net ページを作成しました。

次に、Chermosillo がそのように提供した ajax の例を使用しました。

$.ajax({
  url: 'URLTestProxy.aspx?url=http://some.url.com',
  type: 'POST',
  complete: function(transport) {
     if(transport.status == 200) {
         alert('Success');
     } else {
         alert('Failed');
     }
  }
 });

このようにして、同じオリジン ポリシーを回避しながら、リモート URL のステータス コードを取得できます。

于 2009-08-19T18:55:40.027 に答える
1

例のトランスポートパラメータがXMLHttpRequestオブジェクトであることを知っておくと役立つ場合があります。このオブジェクトから利用できるメソッドとプロパティの詳細は、次の場所にあります。

http://www.w3.org/TR/XMLHttpRequest/#the-xmlhttprequest-interface

この質問のコンテキストで最も注目に値するのは、回答項目です。

  readonly attribute unsigned short status;
  readonly attribute DOMString statusText;
  DOMString getResponseHeader(DOMString header);
  DOMString getAllResponseHeaders();
  readonly attribute DOMString responseText;
  readonly attribute Document responseXML;
于 2010-05-06T23:42:38.457 に答える
0

getResponseHeader() メソッドを使用して、任意のヘッダーを取得できるはずです。

jQueryの場合、次を試してください:

complete: function(transport, textstatus){ 
    alert(transport.getResponseHeader("Status"))
}

警告: テストされていません

于 2009-07-19T01:07:25.193 に答える