资讯专栏INFORMATION COLUMN

循环调用Ajax,异步引起顺序错乱的问题

mo0n1andin / 1203人阅读

摘要:在外层使用循环时再去调用就会导致顺序错乱。比如条数据顺序正常是,现在执行顺序可能是。一个是标题匹配内容会有问题,另外,展示的顺序也会出错。暂无相关信息结果值单位参考范围无无无正常值范围是递归函数,是变量。调用的内层的内容当然也是正确的。

在外层使用for循环时再去调用Ajax就会导致顺序错乱。

for(var i=0;i

比如6条数据顺序正常是123456,现在执行顺序可能是135246。这样一来,比如你想外层的Ajax得到标题以后再在内层匹配相应内容就会出现错乱。一个是标题匹配内容会有问题,另外,展示的顺序也会出错。

解决方案是使用递归,递归可以帮助你正确的顺序去调用Ajax,在递归每一步的索引也是正确的。

function getResult(){

                                        if(currentIndex>=result.recentResult.length){ 

                                            return;

                                        }

                                        $.ajax({

                                            type:"POST",
                                            url: remoteIp + "i/people/checkresult/getTestDetail.do",
                                            data:{
                                                itemId:result.recentResult[currentIndex].itemId,
                                                type:"0",
                                                hospitalCode:"1",
                                                instrumentType:"",
                                                checkDate:result.recentResult[currentIndex].itemId.split("_")[1]
                                            },
                                            dataType:"json",
                                            beforeSend: function (XMLHttpRequest) {XMLHttpRequest.setRequestHeader("Authorization", decodeURIComponent(getCookie("token")).replace(/
|
|(
)|(u0085)|(u2028)|(u2029)/g, "").replace(" ", ""));},
                                            
                                            success:function(result1){
                                                currentIndex++;
                                                console.log(result.recentResult[t].itemName);
                                                console.log(result1);
                                                if(result1.detail.length==0){
                                                    jianyan+="

"+result.recentResult[t].itemName+"("+result.recentResult[t].itemId.split("_")[1]+")

暂无相关信息

"; }else{ jianyan="

"+result.recentResult[t].itemName+"("+result.recentResult[t].itemId.split("_")[1]+")

"; } for(var j=0;j"+result1.detail[j].reportValue+""; } jianyan+="
结果值单位参考范围
"+result1.detail[j].unit+"正常值范围:"+result1.detail[j].refRange+"



"; theResult.innerHTML += jianyan; jianyan=""; t++; getResult(); } }); }

getResult是递归函数,t是变量。这个函数外层还有一个Ajax。result就是外层的结果,result1是内层数据result.recentResult[t].itemName 按照递归以后的标题就是按顺序进行的了。调用的内层Ajax的内容当然也是正确的。

参考:https://blog.csdn.net/yuan882...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/54174.html

相关文章

  • 循环调用Ajax异步引起顺序错乱问题

    摘要:在外层使用循环时再去调用就会导致顺序错乱。比如条数据顺序正常是,现在执行顺序可能是。一个是标题匹配内容会有问题,另外,展示的顺序也会出错。暂无相关信息结果值单位参考范围无无无正常值范围是递归函数,是变量。调用的内层的内容当然也是正确的。 在外层使用for循环时再去调用Ajax就会导致顺序错乱。 for(var i=0;i=result.recentResult.length){ ...

    megatron 评论0 收藏0
  • 循环调用Ajax异步引起顺序错乱问题

    摘要:在外层使用循环时再去调用就会导致顺序错乱。比如条数据顺序正常是,现在执行顺序可能是。一个是标题匹配内容会有问题,另外,展示的顺序也会出错。暂无相关信息结果值单位参考范围无无无正常值范围是递归函数,是变量。调用的内层的内容当然也是正确的。 在外层使用for循环时再去调用Ajax就会导致顺序错乱。 for(var i=0;i=result.recentResult.length){ ...

    freecode 评论0 收藏0
  • JS—异步、回调、高阶函数

    摘要:而是在调用发出后,被调用者通过状态通知来通知调用者,或通过回调函数处理这个调用。请求程序发出请求,从服务器端获取数据,并设置了回调函数。然后,浏览器会设置侦听来自网络的响应,拿到数据后,将该回调函数插入到事件循环。 并发与并行 并发是指两个或多个事件链随时间发展交替执行,以至于从更高的层次来看,就像是同时运行(但在任意时刻只处理一个事件) 并发的关键是你有处理多个任务的能力,不一定同...

    Dean 评论0 收藏0
  • JavaScript执行顺序分析

    摘要:每个线程的任务执行顺序都是先进先出在运行的环境中,有一个负责程序本身的运行,作为主线程另一个负责主线程与其他线程的通信,被称为线程。主线程继续执行我是第一主线程执行完毕,从线程读取回调函数。 前言 上星期面试被问到了事件执行顺序的问题,想起来之前看《深入浅出Node.js》时看到这一章就忽略了,这次来分析一下JavaScript的事件执行顺序。废话少说,正题开始。 单线程JavaScr...

    chnmagnus 评论0 收藏0
  • 【笔记】 你不知道JS读书笔记——异步

    摘要:异步请求线程在在连接后是通过浏览器新开一个线程请求将检测到状态变更时,如果设置有回调函数,异步线程就产生状态变更事件,将这个回调再放入事件循环队列中。 基础:浏览器 -- 多进程,每个tab页独立一个浏览器渲染进程(浏览器内核) 每个浏览器渲染进程是多线程的,主要包括:GUI渲染线程 JS引擎线程 也称为JS内核,负责处理Javascript脚本程序。(例如V8引擎) JS引擎线程负...

    junnplus 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<