我正在使用身份验证进行异步跨域调用。
当我通过身份验证后,我使用通用 get 方法检索真实的应用程序数据:
define(['jquery'], function ($) {
return {
get: function (url, data) {
// Call to authenticate before retrieve data
$.ajax({
type: 'POST',
url: 'root/authentication',
data: { user: root: password: root },
dataType: 'json',
xhrFields: {
withCredentials: true
},
complete: function (response) {
// Call to retrieve application data
$.ajax({
beforeSend: function (xhr) {
xhr.withCredentials = true;
},
type: 'GET',
url: root + url,
xhrFields: {
withCredentials: true
},
async: true,
dataType: 'json',
crossDomain: true
});
}
});
}
};
});
上述数据调用由另一个非通用代码调用:
define(['cors'],
function(cors) {
return function CustomerService() {
function getCustomers() {
return cors.get('/customers');
}
return {
getCustomers: getCustomers
};
};
})
在我的 knockoutjs 视图模型中,我想这样做:
当进行 asyc 调用时,执行 renderCustomers 函数并更新 UI。
$.when(customerService.getCustomers())
.done(renderCustomers)
.fail();
function renderCustomers(customers) {
// Add data to knockout observables
}
为了让我的客户进入 renderCustomers 函数,我需要做些什么改变?
现在客户是未定义的,我猜那是因为我的 ajax 调用没有正确设置承诺。