在下面的jquery函数中,有人可以向我解释为什么“第二个”在“第一个”之前被执行了吗?我假设整个$ .post请求应该在浏览器转到下一行代码之前完成,但这似乎不会发生。
function getGUID () {
$.post(getGUIDScript, function(data, textStatus) {
alert("first");
GUID = data;
},
'text');
alert("second");
}
感谢下面的回复。为了后人的缘故,上面的代码可以写成如下所示,等到帖子完成后再继续。
function getGUID () {
$.ajax({
type: "POST",
url: getGUIDScript,
async: false,
success: function(data) {
alert("first");
GUID = data;
}
});
alert("second");
}
这将引发第一个警报,然后是第二个警告。
答案 0 :(得分:4)
该帖子是异步完成的,因此在第一个语句完成之前执行以下语句。如果需要它们是同步的,则需要使用$ .ajax并将async参数设置为false。更好的是,使用post的回调机制等待并在帖子执行的ajax调用完成后执行后续操作。
答案 1 :(得分:3)
$.post()
初始化一个异步POST请求,该请求将回调作为参数。当服务器返回对POST请求的响应时,将执行回调。
答案 2 :(得分:2)
如果您想进行同步ajax调用,可以将async设置为false。见http://docs.jquery.com/Ajax/jQuery.ajax#options