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

标签 javascript jquery asynchronous scope 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';
}

您能解释一下为什么这不起作用吗?问题是我无法将data 变量存储到result 中,请参阅代码中的注释。我想是因为匿名函数,但我对 javascript 的了解还不足以理解到底发生了什么。

另外,如何根据 ajax 调用的结果在 checkPermission 函数中返回 truefalse

最佳答案

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

@皮诺尚:
我已经看过您建议的解决方案,但我建议不要使用同步 ajax 请求,因为这会在浏览器必须等待 ajax 请求结果的时间内阻塞整个用户界面。我建议您重新考虑您的执行策略,并围绕异步执行的 ajax 请求构建它。

关于javascript - 如何使用 jQuery 将 ajax 调用的结果存储在函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7784678/

相关文章:

c++ - 异步运行的函数的返回类型应该是什么

c - C++11 中的 async-future 模型或 C# 中的 async-await 有什么好的 C 实现吗?

javascript - 如何在 notepad++ 中为 .html 文件中的 javascript 添加自动完成功能?

javascript - Jquery/JavaScript 的奇怪数组作用域问题

javascript - CoffeeScript 做,传递参数

javascript - 为什么我的 html 只加载两个 javascript 脚本之一?

jquery - 使用 Jquery 在 ASP.NET MVC 中转换 UTC 日期时间

java - 如何异步接受 WebSocket?

javascript - 在 merge() 中添加条件 pipeline() 操作

javascript - AngularJS 从服务模型更新范围