jquery问题,$.ajax在for循环里,如何控制完成success函数后再执行下一条循环?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery问题,$.ajax在for循环里,如何控制完成success函数后再执行下一条循环?相关的知识,希望对你有一定的参考价值。

for(var i = 0; i < jsonArr.length; i++)
var j=i+1;
changehtml("status-show","已获得图书列表....共计"+jsonArr.length+"本图书,正在检查....("+j+"/"+jsonArr.length+")《"+jsonArr[i]['bookName']+"》");
$.ajax(
url: "ajax/checkSingleImage.php?",
data: imgUrl:jsonArr[i]['bookCover'],
async:false, //设置为同步
success: function(msg)
var sondiv=document.createElement("div");
sondiv.id = "sondiv"+i;
sondiv.style.color = "ccc";
if(msg != "HTTP/1.1 200 OK")
errCount++;
sondiv.style.color = "red";

sondiv.innerHTML = "《"+jsonArr[i]['bookName']+"》:<a target='_black' style='color:"+sondiv.style.color+";' href='"+jsonArr[i]['bookCover']+"'>点击查看图片";
div.insertBefore(sondiv,lastdiv);
document.getElementById(sondiv.id).innerHTML=sondiv.innerHTML+" "+msg;
lastdiv =sondiv;
alert(lastdiv.id);

);

如果把alert去掉,页面会完全静止,直到所有请求完成后,一起显示出来

你可以把ajax写成一个函数~然后返回成功后就调用一次这个函数~(就是自己调用自己),这样就可以读出一个显示一个了~ 参考技术A 其实目前就是按照次序执行完一次成功之后,再执行下一次。
问题在于你使用了同步模式,会卡住所有的界面操作。
建议使用异步模式,并提供出错处理函数,以进行异常处理。
同时界面使用进度条阻止用户有其它操作。追问

async:true, 以后,会导致得不到服务端响应就向下执行了呀

追答

那样的话就不要使用循环了,相当于全变成回调方式, 提交一个请示,界面显示进度条,等待服务器回应,成功收到回应之后,再提交下一个请求,更新进度条,等待。。。。

本回答被提问者采纳

for循环内 执行$ajax()

for(int i = 0;i<xx;i++)
//$ajax()
//....................
//
$ajax()
..............
alert();
................


想这样执行,如果加了alert();停住的时候 会把ajax的数据显示出来,如果不加alert ,就会等for循环结束 所有ajax的数据一起显示出来
我要不加alert 还能 执行完哪个 ajax 就会立即出数据
ajax 我用的是 jQuery 并且 参数 同步和异步 我都试了!都不行
求怎么样才能解决啊?
越简单的方法越好啊!
谢谢!
这些用法我明白,是var,是我写错了,我写的就是大概的意思,主要问题就是for循环是单线程处理,就算里面的执行的是ajax ,也不异步处理我的数据,而是执行完for循环的次数后,一起把里面ajax的数据显示出来。我想要的就是for没循环一次ajax,结果立刻显示出来,然后在执行下一个ajax,显示,执行,显示。。。。。。到for结束。
请各位大虾帮帮忙。

参考技术A 程序重点位置就是 for(i = 0; i < 6; i++ && k++)里面的,i++ && k++,由于一般的编译器,对于逻辑运算符 的处理,按照从左之右,并且如果左面的表达式就可以得到最终的结果,那右边的就不执行了。
所以,本程序中。i++,先运行 i的 && 然后再执行i自加1。

当i=0的时候,第一次进入for循环,for语句执行到i = 0; i < 6;结束,并不执行i++ && k++,当第一次循环结束后i=0,k=0。

进行第二次循环for语句执行 i < 6; i++ && k++。并先执行i++ && k++。这个时候i=0,&&不需要右边的表达式已经可以知道结果,所以就不执行k++。由此第二次循环后i=1,由于k++没有执行,所以k还是=0。

进入第三次循环,i=1。&&必须要通过计算右边的表达式才能得出结果。所以开始执行k++。所以第三次循环 时候 i=2,k=1

调试与直接运行EXE的结果不同,问题我没有发现,不知道楼上使用的是什么编译器环境?
追问

你说的和我说的没有关系啊!

参考技术B 你写的东西都有问题,
js是弱类型语言,没有int这个数据类型,只有一个var
jQuery的ajax是 $.ajax,不是$ajax.
调用方法是$.ajax((
url: "some.php",
async: false,//同步调用
success: function(html)
//成功执行的内容

)
这里是封装的一个object格式的数据,应该写在()内,作为参数,你都写到()后面,变成定义函数去了.
你按我的方法去写下试试
参考技术C 私下告诉你本回答被提问者采纳 参考技术D 没看懂楼主说的,加不加alert有什么影响么?它并不会影响程序运行啊。

以上是关于jquery问题,$.ajax在for循环里,如何控制完成success函数后再执行下一条循环?的主要内容,如果未能解决你的问题,请参考以下文章

for循环内 执行$ajax()

通过 for 循环和 php 数组进行多次插入(通过 jQuery AJAX 接收)

ajax成功后jQuery继续循环执行

如何在一个循环执行ajax方法里面嵌套的ajax方法

在 jQuery 中附加一个带有 for 循环的 div

jquery高手!!怎样循环请求ajax?? 求救!!