我学习jQuery,但不理解这种情况:
在调试模式下运行此代码时,都运行良好。但是当正常运行此代码时,calback函数不会启动。为什么?在非调试模式下,我使用-> "Start“”-> "End 10“
浏览器:谷歌Chrome。
var nrPost = 10;
$("#buttnX").click(function() {
alert("Start");
GoPosts();
End();
});
function End() {
alert('End ' + nrPost);
};
function GoPosts() {
$.ajaxSetup({async:false});
var url = "http://......";
var data = { ... };
$.post(url, data, Callback, 'json');
};
function Callback(response) {
if (response.error) {
return;
}
nrPost--;
if (nrPost > 0) [
GoPosts();
} else {
return;
}
};
发布于 2011-04-12 12:28:31
在代码中有一个额外的}。我对它做了一些修改,以使用jQuery,并将其放在jsfiddle上。
它应该发出警告:“开始”,然后“结束10",根据您编写代码的方式,这是正确的。你还在等什么吗?
发布于 2011-04-12 12:41:45
我不知道您计划如何处理递归实现,但如果仅此而已,您实际上可以这样做:
function startLoop(nrPost) {
// No need to put this in a loop
$.ajaxSetup({ async: false });
for (var i = 0; i < nrPost; i++) {
alert('Start ' + i);
var url = 'http://......';
var data = {};
$.post(url, data, function (response) {
if (response.error)
return;
alert('End ' + i);
}, 'json');
}
}
$('#buttnX').click(function () { startLoop(10) });
希望这能帮上忙!
发布于 2011-04-12 12:35:18
我想你是在期待这个展览:
这不太可能适用于您的解决方案。
Ajax调用$.post(url, data, Callback, 'json');
是异步的。这意味着,一旦$.post
方法返回,请求将发送到您提供的URL。但是,在Callback
收到答案之前,不会调用JQuery。立即发生的情况是,GoPosts
终止,程序继续。它返回到代码的第5行,在单击处理程序中的匿名函数中。此时,End()
被调用并警告"End 10“。
您可能希望将调用End
放在Callback
中,而不是:
function Callback(response)
{
if (response.error)
{
return;
}
nrPost--;
if(nrPost>0)
GoPosts();
else
{
End(); // You only want to end once you have made you nrPost calls to GoPost
return;
}
};
https://stackoverflow.com/questions/5641080
复制相似问题