Ben*_*ier 1 javascript jquery scope asynchronous anonymous-function
我有以下代码:
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';
}
Run Code Online (Sandbox Code Playgroud)
你能解释为什么这不起作用.问题是我无法存储data
变量result
,请参阅代码中的注释.我想这是因为匿名函数,但我不知道javascript到底能够准确理解会发生什么.
另外,如何可以返回true
或false
在checkPermission
基于Ajax调用的结果函数?
您没有得到预期的结果,因为ajax回调函数是异步执行的.这意味着该进程不会等待ajax调用完成.因此,在ajax调用执行了回调函数之前,外部函数checkPermission
已经终止,并且它的返回值因此不会被ajax回调改变.
@pinouchon:
我已经看到了你建议的解决方案,但我建议不要使用同步ajax请求,因为这将阻止浏览器的整个用户界面,因为它必须等待ajax请求的结果.我建议你重新考虑你的执行策略,并围绕异步执行的ajax请求构建它.