$.getJSON
在异步。结果数据仅在回调中可用。它不可用,因为$.getJSON
文档中的返回值从未提及返回值。
$.getJSON("/api/administrators", null, function(adminData, status, xhr){
var viewModel = {
administrators: ko.observableArray(adminData)
};
ko.applyBindings(viewModel);
});
如果您需要进行单独的 AJAX 调用,您应该使用jQuery.when
See Wait until all jQuery Ajax requests are done?
$.when($.ajax("/api/administrators"), $.ajax("api/roles")).done(function(resp1, resp2){
ko.applyBindings({
administrators: ko.observableArray(resp1[0]),
roles: ko.observableArray(resp2[0]);
});
});
这里有一些其他不太理想的解决方案,但它向您展示了幕后发生的事情。
如果您不介意请求相互等待
$.getJSON("/api/administrators", null, function(adminData){
$.getJSON("/api/administrators", null, function(apiRoles){
ko.applyBindings({
administrators: ko.observableArray(adminData),
roles: ko.observableArray(apiRoles);
});
});
});
如果您确实关心,它会更复杂,因为您需要跟踪请求是否完成
var ajaxAdminData, ajaxApiRoles
$.getJSON("/api/administrators", null, function(adminData, status, xhr){
var ajaxAdminData = adminData;
// If the other call finished, apply the bindings
if (ajaxApiRoles) {
applyBindings();
}
});
$.getJSON("/api/administrators", null, function(apiRoles, status, xhr){
ajaxApiRoles = apiRoles;
// If the other call finished, apply the bindings
if (ajaxAdminData) {
applyBindings();
}
});
function applyBindings() {
ko.applyBindings({
administrators: ko.observableArray(ajaxAdminData),
roles: ko.observableArray(ajaxApiRoles);
});
}