我試圖構建一個Windows8應用程序,我使用SplitApp作爲基礎。試圖從AJAX添加數據但失敗。如何使用javascript在windows8中填充列表
在文件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,因爲這個函數是匿名的,你可以看到。
你會如何做到這一點?
的問題是的getData(函數(theMetting){ $。每個(theMeeting,功能(鍵,項目){ list.push(項目); }); }是匿名函數默認情況下來自微軟,我無法像你所建議的那樣從我的app.js中訪問它,或者? – rubin 2013-02-22 14:54:09
不,getData只是你可以寫的功能而不是「數據」函數,我假設所有的代碼都是你的 - 如果無法從data.js中更改函數,並且修改應用程序的唯一方法是定義「數據」函數,那麼必須對服務器進行同步(* not * asynchronous)調用 - 您可以通過向$ .ajax函數傳遞一個標誌來實現,然後$ .ajax樂趣ction會一直等到「成功」回調已經完成... – phtrivier 2013-02-22 14:59:00
現在,明確地說,我並不真正理解「在默認情況下來自ms的缺省函數中」的含義。我只能告訴你,$ .each(data(),....)版本只有在data()*返回一個數組時纔會起作用,並且你將不能寫一個返回數據的函數從異步調用到服務器。要麼讓它成爲同步調用,要麼重寫循環以適應它。希望這有助於。 – phtrivier 2013-02-22 15:05:26