我已经从本网站的一些答案中了解了async
函数的行为。但我仍然感到困惑。我尝试了2个jQuery语句,其中 STMT1 '与ajax调用合作',而STMT2则没有。我的意思是ajax
声明无法获得所需的数据。
为什么会这样? STMT1 的执行速度是否比 STMT2 快一点?
编辑:按行为,我的意思是async
语句一起执行,它们是非阻塞的。所以我的两个陈述都不行?但其中一个仍在工作。为什么会这样?
$(document).ready(function(){
var foo='types: ';
$("button").click(function(){
//STMT1
// $("p").each(function(){
// foo=foo+$(this).text();
// });
//STMT2
$("p").hide(function(){
foo="YOLO";
});
$.ajax({
url: 'api.php',
type: 'post',
data: 'name='+foo,
success: function(result){
console.log(result);
},
error: function(){
console.log("Couldn't make request");
}
});
});
});
答案 0 :(得分:-1)
jquery动画是异步方法,hide方法的默认持续时间是400ms
来源 - http://api.jquery.com/hide/
这就是为什么你的ajax请求先行,变量foo稍后改变的原因。希望它有所帮助。
答案 1 :(得分:-2)
当jQuery以默认延迟(400毫秒)隐藏元素时,hide
回调将在稍后运行,而不是立即运行。因此,在您开始以下ajax调用之前,foo
尚未更改。如果您想等到更改foo
以启动以下ajax调用,请将该调用置于 hide
回调中。
不,这根本不是巧合。您的四个异步调用不全部并行运行,其中只有两个是。以下是该代码中发生的事情:我的意思是ajax声明正在获取foo的值,我认为不应该这样,因为所有3个语句都是相互执行的,因为它们是异步的? STMT1执行得足够快,以便ajax获得值吗?
ready
回拨ready
回调被触发:
foo
(var foo='types: '
)指定一个值。click
处理程序hide
foo
的现有值("types: "
)启动ajax调用。hide
的回调即开始运行,将foo
的值设为"YOLO"
foo
的值已经是"YOLO"
,因此所使用的内容是什么?{0} ajax电话