javascript - 如何从 jQuery 获取变量以发挥作用?

标签 javascript jquery variables scope

但由于某些原因,当我将变量data 放入naughty 时,它没有data 的内容。

function cookie() {
    var naughty = 'aaa';
    $.post('/cookie', function(data) {
        naughty = data;
    });
    alert(naughty); // sends "aaa"
}

为什么?

更新:谢谢!现在我明白了,因为 $.post() 是异步的,所以 alert(naughty) 将在 数据填充之前执行。

现在我有子问题:当我关闭异步时,只有函数 cookie() 会推迟执行,或者整个浏览器引擎会卡住,直到 AJAX 完成?

更新 2: 是的,@Kevin B,你是对的,naughty 永远不会被填充...我在第一个代码示例中犯了错误。我很幸运,所有的答案都是有效的,只有第二个代码示例:-)

正如@Kevin B 指出的那样,async=false 将在 jQuery 1.8 中弃用。它会卡住浏览器,直到请求完成...

子问题 #2: 在这个 AJAX 请求之后,我在 cookie() 中有更多代码。那么,我能否以某种方式暂停 cookie() 的执行,直到 AJAX 完成,而不用 async=false 卡住整个浏览器?还是我必须找到新的方法(使用完成/成功回调)来编写这个想法?

最后编辑: 我意识到我想要的是 ASYNC:FALSE... 所以我只是简单地使用了它。顺便提一句。 ASYNC:FALSE 不会从 jQuery 中删除!只有特殊类型的用例将是...

最佳答案

这是一个竞争条件。由于 .post() 是一个异步函数,警报会在 naughty 重置为数据之前执行。

如果您希望响应在继续之前返回,您可以使用 .ajax 并将 async 设置为 false。

How can I stop $.post in jQuery working asynchronously?

关于javascript - 如何从 jQuery 获取变量以发挥作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11850830/

相关文章:

javascript - 用 "\\"写 JSON

javascript - 如何在angular js中单击外部时关闭弹出窗口

javascript - 恢复属性键/值

php - jQuery 在 php 中单击 mysql db 中的行不起作用

javascript - 未捕获 : Bootstrap's JavaScript requires jQuery

java - (var) 无法解析为类型

javascript - 在 jQuery 中切换,隐藏第一个段落

javascript - 如何用代码弹出javascript模式而不是单击按钮

bash - Bash 中的动态变量名称

ruby - 在 Ruby 中是否可以显式创建局部变量