我正在尝试构建一个windows8应用程序,我使用SplitApp作为基础。只是尝试从AJAX添加数据但它失败了。
在data.js文件中我有:
(function () {
var list = new WinJS.Binding.List();
$.each(data(), function (key, item) {
list.push(item);
});
}
})();
在app.js文件中我有(这可以在应用中填充并填充列表)
function data() {
var testGroupMeeting = [];
var testMeeting = [];
testGroupMeeting.push(new Group({ id: "1", title: "Group1" }));
testMeeting.push(new Meeting({ group: testGroupMeeting[0], title: "Item Title: 1" }));
return testMeeting;
}
但是当我想使用AJAX来获取数据并在填充时返回testMeeting它会崩溃。
在app.js文件中我有(不能正常工作),但我需要让它工作
function data() {
var testGroupMeeting = [];
var testMeeting = [];
$.ajax({
url: "/json/json.php",
dataType: 'json',
contentType: 'text/json',
type: 'GET',
success: function (data) {
//Data here is correct and mapped to the arrays, its the same as in the abow example, i have the same data in the arrays as in the above example
}
return testMeeting;
}
});
}
但问题似乎是AJAX不应该返回任何东西。而且我无法对data.js进行回调,因为您可以看到该函数是匿名的。
你会怎么做?
答案 0 :(得分:0)
这不能以这种方式工作,因为$ .ajax函数是异步的:它执行ajax调用,然后,稍后使用适当的数据调用“success”函数。
您将重写$ .each(data()...以便不是调用data()并期望它返回testMeeting,而是调用数据并期望它使用testMetting对象调用回调。 / p>
类似的东西:
(function () {
var list = new WinJS.Binding.List();
getData(function (theMetting) {
$.each(theMeeting, function (key, item) {
list.push(item);
});
}
})();
// callback is a function that will be called with
// something that is built from the server, after the ajax
// request is done
function getData(callback) {
$.ajax({
// ... everything you did ...
success: function (data) {
// ... use the data to build the meeting object
// and pass it to the callback
callback(meeting)
}
return testMeeting;
}
});
}
同步代码(返回函数)和异步调用(执行某些操作,稍后使用结果调用回调)之间存在根本区别。 $ .ajax是典型的异步函数。
你可以理论上将“async”标志传递给ajax,这样$ .ajax函数在Ajax调用完成之前不会返回,但是你可能不希望这样做它会阻止你的UI。
希望这有帮助。