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去掉,页面会完全静止,直到所有请求完成后,一起显示出来
问题在于你使用了同步模式,会卡住所有的界面操作。
建议使用异步模式,并提供出错处理函数,以进行异常处理。
同时界面使用进度条阻止用户有其它操作。追问
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结束。
请各位大虾帮帮忙。
所以,本程序中。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函数后再执行下一条循环?的主要内容,如果未能解决你的问题,请参考以下文章