2012-08-28 42 views
8

"古い" Dojoの場合、Xhr要求(see Example 6 here)のload機能に第2引数ioargsを渡すことができます。このioargsは、(とりわけ)リクエストのタイムスタンプとステータスコードを提供しました。AMD'ized DojoのXHR応答コード(+タイムスタンプ)を取り出す方法は?

しかし、私はこれを新しい "クリーナー"(および順方向互換性のある)Dojoでどのように達成できますか?
残念ながら、私はcurrent documentationのヒントを見つけることができませんでした。

以下は、上記の「新しい」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; 
     } 
    ); 
    } 
); 

私はロード機能で利用可能なリクエストのタイムスタンプとステータスコードを持つように変更するには何が必要ですか?

+0

は延期要求によって生成さありません。 get()内部の情報を取得しますか? – djna

+0

'request.get()'は 'promise'オブジェクトを生成します(@Kniganapolkeもそうです)。私は、そこにいくつかの関数定義とプロトタイプのコンストラクタの横にデータを見つけることができません。 –

答えて

13

requestは特別promisesource)を返します:レスポンス:

約束は、標準の約束で利用できない追加的な性質を持って道場/リクエスト呼び出しから返されました。 - (追加クエリ文字列で)要求を行うために使用される最終的なURL

  • オプション - オプション

    • URL:このプロパティは、より詳細に応答を記述し、凍結オブジェクト(利用可能な場合)に解決されます約束です応答で扱うデータ(handleAsが指定されている場合)
    • のgetHeader(ヘッダ名) - - ヘッダを取得する機能応答
    • データ内のデータの文字列表現 - 要求
    • テキストを作るために使用されるオブジェクト要求から;プロバイダがヘッダ情報を提供しない場合、この関数はnullを返します。
  • ですから、このpromise.responseにチェーン.then前述のすべてのプロパティへのアクセスを取得する必要があります。

    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/

    +0

    ありがとうございます。状態を取得することはそれで完璧に機能します。リクエストのタイムスタンプを取得する可能性はありませんが、それは正しいですか? –

    +0

    そうではありませんが、 'timestamp:(new Date())。valueOf()'をリクエストオプションに追加すると 'response.options.timestamp'で見つけられます(updated jsFiddleを参照)。あるいは、リクエストごとにあなたのために 'リクエスト/レジストリ 'を実行することを検討してください。 – phusick

    +0

    これも私を助けました。ありがとう。 – hypno7oad

    関連する問題