我正在使用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);
})();
答案 0 :(得分:5)
您将无法使getData
函数返回数据本身 - 这是Javascript和Metro中异步操作的本质。
WinJS.xhr
函数返回一个WinJS.Promise
对象,表示异步操作。您应该将此Promise
返回给调用者,调用者可以使用then
或done
方法注册回调函数,这些函数将在操作完成时得到通知(在Promises的术语中, Promise
已履行)。
因此,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" })
}