8

「古い」Dojo では、Xhr リクエストioargsの関数に 2 番目の引数を渡すことができました (こちらの例 6 を参照)。これにより、(とりわけ)リクエストのタイムスタンプとステータス コードが提供されました。loadioargs

しかし、新しく「よりクリーンな」(そして前方互換性のある) Dojo でこれを達成するにはどうすればよいでしょうか? 残念ながら、現在のドキュメント
にはヒントが見つかりませんでした。

以下は、上記で参照した例を「新しい」Dojo に移植したものです。しかし、ioargs未定義になります:

require( "dojo/request/xhr", "dojo/dom", "dojo/domReady!",
  function(request, dom){
    // Look up the node we'll stick the text under.
    var targetNode = dom.byId("getLicenseStatus");

    // The parameters to pass to xhrGet, the url, how to handle it, and the callbacks.
    request.get(
      "{{dataUrl}}dojo/LICENSE",
      {
        handleAs: "text",
        preventCache: true
      }
    ).then(
      function(data, ioargs){
        // FIXME: ioargs is undefined
        targetNode.innerHTML = "XHR returned HTTP status: " + ioargs.xhr.status;
      },
      function(error){
        targetNode.innerHTML = "An unexpected error occurred: " + error.response.status + ": " + error.response.text;
      }
    );
  }
);

ロード関数でリクエストのタイムスタンプとステータス コードを利用できるようにするには、何を変更する必要がありますか?

4

1 に答える 1

13

requestpromise特別な(ソース)を返します:

dojo / request呼び出しから返されたプロミスには、標準のプロミスでは使用できない追加のプロパティである応答があります。このプロパティは、応答をより詳細に説明するフリーズされたオブジェクト(利用可能な場合)に解決されるPromiseです。

  • url –リクエストを行うために使用される最終的なURL(クエリ文字列が追加されたもの)
  • options –リクエストを行うために使用されるオプションオブジェクト
  • text –応答内のデータの文字列表現
  • data –応答で処理されたデータ(handleAsが指定されている場合)
  • getHeader(headerName)–リクエストからヘッダーを取得する関数。プロバイダーがヘッダー情報を提供しない場合、この関数はnullを返します。

したがって、前述のすべてのプロパティにアクセスするには、.thenこれにチェーンする必要があります。promise.response

var promise = request.get("{{dataUrl}}dojo/LICENSE");

promise.response.then(function(response) {
    console.log("status", response.status);
    console.log("url", response.url);
    console.log("data", response.data);
});

jsFiddleで実際の例を参照してください:http://jsfiddle.net/phusick/6wB2L/

于 2012-08-28T08:26:27.277 に答える