但由于某些原因,当我将变量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。
关于javascript - 如何从 jQuery 获取变量以发挥作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11850830/