aho*_*eth 1 javascript windows microsoft-metro winjs
我正在使用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);
})();
Run Code Online (Sandbox Code Playgroud)
您将无法使您的getData函数返回数据本身 - 这是Javascript和Metro中异步操作的本质.
该WinJS.xhr函数返回一个WinJS.Promise对象,该对象表示异步操作.你应该回到这个Promise给你的来电者,谁可以使用then或done方法来注册回调函数将被通知当操作完成(在承诺的术语,当Promise被满足).
因此,getData函数的调用者看起来像这样:
function myFunc() {
getData().then(function(xhr) {
// ...do something with the data when it arrives...
}, function(err) {
// ...do something with the error
});
}
Run Code Online (Sandbox Code Playgroud)
请注意,回调是通过XMLHttpRequest对象传递的.
你的getData方法变成这样:
function getData() {
return WinJS.xhr({ url: "http://stackoverflow.com" })
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2635 次 |
| 最近记录: |