我正在尝试从ajax返回响应并将它们推送到全局范围,因此我可以在我喜欢的任何地方使用它们。
var getOrderStatus = getOrderStatus(),
getUserData = getUserData(),
orderFormReady = $.when(getOrderStatus, getUserData),
user = {},
order = {
pages: {}
};
orderFormReady.done(function() {
console.log("USER");
console.log(user);
changePage(parseInt(user.status), "initial");
});
getOrderStatus.done(function(data) {
console.log("Current page: " + data);
});
getUserData.done(function(data) {
var customer = JSON.parse(data);
user = customer;
});
getOrderStatus()返回int,getUserData以json的形式返回客户数据。
大部分时间"用户"是空的,但有时随机显示正确的数据。 90%的时间是空的。 orderStatus也是如此。
“网络”标签始终显示响应。那么我错过了什么?
答案 0 :(得分:0)
我认为你不能保证在orderFormReady.done()之前执行getUserData.done()。
但无论如何,只需摆脱它并在$ .when的.done()中执行所有操作 - 来自两个请求的响应将按照您将Deferreds传递到“当“功能:
var getOrderStatus = getOrderStatus(),
getUserData = getUserData(),
orderFormReady = $.when(getOrderStatus, getUserData),
user = {},
order = {
pages: {}
};
orderFormReady.done(function(userDataResponse, orderStatusResponse) {
user = JSON.parse(userDataRespone);
console.log("User status: " + user.status);
console.log("Current page: " + orderStatusResponse);
changePage(parseInt(user.status), "initial");
});
有关详细信息,请参阅https://api.jquery.com/jquery.when/。