1

私はJavascriptでWin8アプリを開発することから始めています。私はjavascriptに慣れていないので、言語にあまり強くありません。コード内のjson応答を解析し、配列に格納しようとしています。ここで、解析のステップで設定しようとしている特定のプロパティを持つオブジェクトの配列を作成します。しかし、WinJS.xhrの部分で配列が更新されていないようです。より明確にするために、REF 1(以下のコードのコメント)コンソール出力は正常に機能しますが、REF 2(以下のコードのコメント)コンソール出力は次のようなエラーをスローします。

JavaScriptランタイムエラー:未定義またはnull参照のプロパティ'Name'を取得できません

var sampleArr = new Array();

WinJS.xhr({ url: "http://some-api-with-json-response" }).then(
       function (response) {
           var name= JSON.parse(response.responseText);
           sampleArr[0] = { Name: name.title };
           console.log("First chance:" + sampleArr[0].Name); //REF 1
           item_number++;
           };

console.log("Second chance:" + sampleArr[0].Name); //REF 2

誰かが、私がどこで間違っているのかを知ることができますか?

ありがとう :)

4

2 に答える 2

2

問題は、XHR呼び出しがバックグラウンドで実行されていることです。これが発生している間、JavaScriptランタイムは次のステートメント(である)に移動しますREF2。そのため、リクエスト自体が完了する前に、リクエストの結果を読み取ろうとしています。

解決策は、結果にアクセスするコードを、次のthenようにメソッドの別の呼び出しに渡す関数に配置することです。

var sampleArr = new Array();

WinJS.xhr({ url: "http://some-api-with-json-response" }).then(
       function (response) {
           var name = JSON.parse(response.responseText);
           sampleArr[0] = { Name: name.title };
           console.log("First chance:" + sampleArr[0].Name); //REF 1
           item_number++;

       }).then(function () {
           console.log("Second chance:" + sampleArr[0].Name); //REF 2
       });

を含む関数は、REF2を含む関数REF1が完了するまで実行されず、その関数はXHR要求が完了するまで実行されません。

于 2012-10-12T21:29:48.740 に答える
2

.then(callback)callbackリクエストが成功すると関数が実行されます。

その時点で、関数のREF 2前に実行されるコードはです。callbacksampleArr[0]undefined

于 2012-10-12T06:14:18.693 に答える