$ .ajax调用后返回

时间:2014-05-01 17:29:16

标签: jquery ajax cookies

我已经使用了这段代码,并且我构建了另一个函数,只是尝试了另一种方法。

var cookie_val = "";
    function getCookie() {        
        $.when($.ajax("../handlers/users/get_user.ashx")).then(function (data, textStatus, jqXHR) {
            $.when(getCookieValue(data)).then(function () {
                cookie_val = $.cookie("default_value:" + cookie_val);
            });            
        });
        return cookie_val;
    }
    function getCookieValue(data) {
        cookie_val = data;
    }

这样可行,但只有当我执行两次该功能时,我该如何才能在第一次调用时使其工作?

1 个答案:

答案 0 :(得分:1)

在获取值之前,您必须等待ajax请求完成:https://api.jquery.com/jQuery.when/。在getCookie中发出的请求都是异步的,因此它们在等待服务器响应时不会暂停执行其他代码。有两种方法可以解决这个问题:

返回在getCookie

中创建的延迟对象
function getCookie() {
    return $.when(....
}

完成后,使用cookie值执行您需要的操作

getCookie().done(function (cookie_value) {
    console.log(cookie_value);
});  

或者,将呼叫同步:https://api.jquery.com/jQuery.ajax/

function getCookie() {
    $.ajax({
        url: '../hnadlers/users/get_user.ashx', 
        async: false
    }).done(function (data, textStatus, jqXHR) {
        cookie_value = $.cookie('default_value:' + data);
    });
    return getCookieValue();
}

此外,您确定getCookieValue不应该返回cookie_val,正如您当前的实施所示,它应该被命名为setCookieValue