4

アドオン SDK を使用して、Firefox アドオンを構築しています。特定のページに http リクエストを送信する必要があり、接続タイムアウトを処理したいのですが、API で何も見つかりませんでした: https://addons.mozilla.org/en-US/developers/docs/sdk/latest /modules/sdk/request.html

私が実際に探しているのは、クライアントがサーバーに接続できなかった場合のコールバックです。

これを達成する方法はありますか?

4

1 に答える 1

9

onCompleteリクエストがネットワークに対して完了したと見なされると、SDK リクエストは常に を呼び出します。これはonComplete、リクエストがエラーを返したか成功を返したかに関係なく、どのような場合でも呼び出されることを意味します。

どのエラーが発生したかを検出するには、Response オブジェクト (onComplete関数に渡されるオブジェクト)のプロパティ "status" ( response.status) を確認する必要があります。リクエストのステータス コードを保持します。ステータス コードを調べるには、mozilla developer network のリストを検討してください。応答ステータスが 0 の場合、要求は完全に失敗し、ユーザーはおそらくオフラインであるか、ターゲットに到達できませんでした。

タイムアウトは、ステータス コード 504 または 0 のいずれかになります。実装は次のようになります。

var Request = require("sdk/request");

Request({
  url: "http://foo.bar/request.target",
  onComplete: function(response) {
    if(response.status==0||response.status==504) {
      // do connection timeout handling
    }
    // probably check for other status codes
    else {
      // assume the request went well
    }
  }
}).get();

私は個人的に、リクエスト オブジェクトで検証関数を使用しています。この関数は、正しい応答、Web サーバーからのエラー、または接続の問題 (4xx および 0 ステータス コード) を取得したかどうかに応じて数値を返します。

于 2013-04-05T22:24:23.447 に答える