我已经使用了这段代码,并且我构建了另一个函数,只是尝试了另一种方法。
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;
}
这样可行,但只有当我执行两次该功能时,我该如何才能在第一次调用时使其工作?
答案 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
。