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 - 使用分隔值在另一个(主)数组内创建一个数组

javascript - 继续在谷歌地图 v3 中绘制折线

javascript - 无法删除附加的 jQuery 元素

c++ - 将正符号变量替换为无符号变量

php - 遍历jQuery语句

javascript - jQuery:悬停和单击时在按钮上切换具有相同特性的类

jquery - CSS 使用搜索建议突出显示选定文本

jquery - jqGrid 动态选择选项

java - 扫雷哈希集

java - Android变量未定义