如何使用jQuery在函数中存储ajax调用的结果?

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到底能够准确理解会发生什么.

另外,如何可以返回truefalsecheckPermission基于Ajax调用的结果函数?

Dec*_*ler 5

您没有得到预期的结果,因为ajax回调函数是异步执行的.这意味着该进程不会等待ajax调用完成.因此,在ajax调用执行了回调函数之前,外部函数checkPermission已经终止,并且它的返回值因此不会被ajax回调改变.

@pinouchon:
我已经看到了你建议的解决方案,但我建议不要使用同步ajax请求,因为这将阻止浏览器的整个用户界面,因为它必须等待ajax请求的结果.我建议你重新考虑你的执行策略,并围绕异步执行的ajax请求构建它.