1

Windows 8 Metro SDK atm をいじっていますが、WinJS.xhr を使用すると問題が発生しました。getData 関数で WinJS.xhr を返す代わりに、json オブジェクトを返すとすべて正常に動作しますが、xhr 要求によって生成された json オブジェクトを返したいと考えています。

ここで私の試みで何が間違っていますか? ありがとう!!:)

(function () {
    "use strict";

function getData() {
    return WinJS.xhr({ url: "http://stackoverflow.com" }).done(
        function (request) {
            var results = [];
            var Item = {
                title: "title",
                text: "some text goes here"
            }
            results.push(Item);
            return results;
        },
        function (request) {
            var results = [];
            results.push({ title: "error", text: "error text" });
            return results;
        }
    );
}

var categoryList = new WinJS.Binding.List(getData());


var publicMembers = { itemList: categoryList };
WinJS.Namespace.define("Data", publicMembers);

})();
4

1 に答える 1

5

関数がデータ自体を返すようにすることはできません。getDataこれは、Javascript と Metro の非同期操作の性質です。

このWinJS.xhr関数はWinJS.Promise、非同期操作を表すオブジェクトを返します。これを呼び出し元に返す必要があります。呼び出し元はまたはメソッドをPromise使用して、操作が完了したときに通知されるコールバック関数を登録できます (Promises の用語では、が満たされたとき)。thendonePromise

したがって、getData 関数の呼び出し元は次のようになります。

function myFunc() {
    getData().then(function(xhr) {
        // ...do something with the data when it arrives...
    }, function(err) {
        // ...do something with the error
    });
}

コールバックが XMLHttpRequest オブジェクトに渡されることに注意してください。

getData メソッドは次のようになります。

function getData() {
    return WinJS.xhr({ url: "http://stackoverflow.com" })
}
于 2012-06-10T21:27:52.980 に答える