我有以下代码:
function checkPermission(user) {
var result = 'default';
$.get('/mymodule/checkPermission.php?user=' + user, function(data) {
result = data; // does not store data into result, why ?
if (result == 'no') {
$('.sorry_msg').show();
}
});
alert(result); // shows "default".
return result == 'yes';
}
您能解释一下为什么这不起作用吗?问题是我无法将data
变量存储到result
中,请参阅代码中的注释。我想是因为匿名函数,但我对 javascript 的了解还不足以理解到底发生了什么。
另外,如何根据 ajax 调用的结果在 checkPermission
函数中返回 true
或 false
?
最佳答案
您没有得到预期的结果,因为 ajax 回调函数是异步执行的。这意味着该进程不会等待 ajax 调用完成。因此,在 ajax 调用执行回调函数之前,外部函数 checkPermission
已经终止,因此它的返回值不会被 ajax 回调更改。
@皮诺尚:
我已经看过您建议的解决方案,但我建议不要使用同步 ajax 请求,因为这会在浏览器必须等待 ajax 请求结果的时间内阻塞整个用户界面。我建议您重新考虑您的执行策略,并围绕异步执行的 ajax 请求构建它。
关于javascript - 如何使用 jQuery 将 ajax 调用的结果存储在函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7784678/