Ajax响应有时是空的。 Google Chrome响应标签正确显示结果

时间:2018-02-21 14:19:35

标签: javascript php ajax

我正在尝试从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也是如此。

“网络”标签始终显示响应。那么我错过了什么?

enter image description here

1 个答案:

答案 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/