jQuery $.post()的递归方式(循环)
jQuery $.post() in recursive way (loop)
我学习jQuery,不理解这种情况:
当在调试模式下运行此代码时,所有工作正常。但是当正常运行此代码时,回调函数不启动。为什么?在非调试模式下,我有-> "Start" -> "End 10"
浏览器:Google 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;
}
};
你有多余的};在你的代码中。我稍微改变了一下,用jQuery把它放在jsfiddle上。
http://jsfiddle.net/rH8RV/19/它应该提醒:"开始",然后"结束10",这是正确的基于你如何写你的代码。你还期待什么吗?
我不知道你打算用你的递归实现做什么,但如果这就是全部,你实际上可以这样做:
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) });
希望有帮助!
我想你希望显示为:
- "开始"
- "End 0"
这对你的解决方案不太可能起作用。
Ajax调用$.post(url, data, Callback, 'json');
是异步的。这意味着一旦$.post
方法返回,请求将被发送到您提供的URL。但是,直到JQuery接收到答案后才调用Callback
。立即发生的是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;
}
};
相关文章:
- 在ng重复循环中显示条件内容的最佳方式是什么
- 使用while循环+break是一种可接受的方式;goto;手术的结束
- 如何处理javascript中的循环引用,类似于Excel提供迭代限制的方式
- for循环在node.js中的工作方式
- 循环jQueryajax和传递参数的正确方式
- 有没有可能以某种方式用Promises运行同步循环
- 从包含在for循环中的递归返回值的正确方式
- 哪种循环方式最快?[出于好奇]
- 以编程方式确定是否可以在对象上运行 for 循环的最佳解决方案
- 如何以更快的方式在wordpress循环中添加多个 vk.com,例如小部件
- 在循环或以其他方式动态创建 JSON 对象中的属性
- 变量、数组和 for 循环的行为方式不尽如人意
- 以延迟的方式循环元素
- 使用Jquery或Javascript循环浏览一堆小化身的最佳方式
- 在ng重复循环中只显示一些html元素的最佳方式是什么
- 在Javascript中,从2D数组的2层循环中获得输出的最佳方式是什么
- 什么是稳健的&这是一种很好的方式,可以循环穿过一根绳子,把它的一部分刮下来
- 以特定的方式循环遍历动态JSON
- 如何以编程方式循环遍历文件并要求每个文件
- jQuery $.post()的递归方式(循环)