关于ajax同步异步处理循环遍历及push时发生的疑问

今天写了一个简单的ajax请求,其中因为一些需求 渲染过程没有写在回调函数内,要在外部访问遍历后的数组进行渲染,第一次写时图片如下图

此时console.log(arr)打印出来的内容是一个长度为0,包含十条完整数据的数组,如下图

此时,当我访问arr[0]或者arr[1]时,均会出现undefined提示,

开始的时候我一直认为是数组操作的问题,在这个方向上努力了半天,发现方向可能是错的,最后觉得可能是因为ajax默认的异步请求,所以将请求改成了同步,如下图

此时打印的内容变成了想要的需求,如下图

这样的话,我实际上的需求已经达成了,等我活忙完了回过头来反思,发现不能理解其中到底发生了什么,如果是因为异步请求,导致循环和push没完成就打印了arr,那么arr内应该是一个拥有不完整数据的数组,但打印出来的内容却是一个拥有完整的10条数据且长度为0的数组,也就是说,异步请求时循环遍历以及push的过程已经结束了,不然不可能有完整的10条数据,但为什么打印出来的arr却是一个没有长度数据完整的数组呢?

希望路过的大神能给解答一下,感激不尽

原文地址:https://www.cnblogs.com/shenwu555/p/10002496.html

时间: 2024-07-29 14:46:02

关于ajax同步异步处理循环遍历及push时发生的疑问的相关文章

ajax同步异步设置导致的问题及return返回值(返回ajax请求的数据)

一.ajax同步异步设置导致父子页面数据更新不一致问题. 1.在修复入宿退宿功能时,发现点击退宿.入宿按钮时.父页面数据更新了但是子页面数据要重新打开才能更新.如下图: 因为数据刷新函数如下:父页面刷新函数findRoomPeople()采用的是异步,所以,操作的数据还没更新,子页面刷新函数loadRoomInfo()就已经执行,所以获取到的数据还是之前的数据. <script> roomHandle: function () { /*刷新数据变化*/ parent.cootoo_room.f

JavaScript-//FOR/IN循环。当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处。

<script> //FOR/IN循环.当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处. function getvalue(portfolio){ var total=2.0; for(stock in portfolio){ //遍历portfolio中的每只股票 var shares=portfolio[stock]; //得到每只股票的份额 var proce=getQuery(stock); //查找股票价格 getQuery()查询部分 total+

ajax同步异步问题

之前一直在写JQUERY代码的时候遇到AJAX加载数据都需要考虑代码运行顺序问题.最近的项目用了到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除. 而异步则这个AJAX代码运行中的时候其他代码一样可以运行. jquery的async:false,这个属性 默认是true:异步,false:同步. $.ajax({ type: "post", url: "

Ajax同步异步请求

一.什么是同步请求:(false)       同步请求即是当前发出请求后,浏览器什么都不能做,必须得等到请求完成返回数据之后,才会执行后续的代码,相当于是排队,前一个人办理完自己的事务,下一个人才能接着办.也就是说,当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面处于一个假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面解除假死状态. 二.什么是异步请求:(true)       异步请求就当发出请求的同时,浏览器可以继续做任何事,Ajax发送请求并不会影响页面的加

福运来源码搭建与ajax同步异步

Ajax的请求方式根据异步参数的不同,可分为同步异步,默认为异步请求真 async:true //异步 async:fasle //同步 同步请求即当Ajax发出请求后,会把页面的所有代码停止加载,即页面进入假死状态,必须等Ajax请求 福运来源码搭建QQ:2152876294 网址diguaym.com完成返回数据后,才会解除假死状态,继续执行其他代码.异步请求则这个Ajax代码运行的时候其他代码一样可以运行. $.ajax({ type:"POST", url:"${st

ajax同步异步

test.html <a href="javascript:void(0)" onmouseover="testAsync()"> asy.js function testAsync(){    var temp;    $.ajax({        async: false,        type : "GET",        url : 'tet.php',        complete: function(msg){  

async: false 实现AJAX同步请求 ( $.ajax同步/异步(async:false/true) )

虽然说ajax用来执行异步请求的比较多,但有时还是存在需要同步执行的情况的. 比如:我需要通过ajax取执行请求以返回一个值,这个值在ajax后面是需要使用到的,这时就不能用异步请求了.这时候就需要使用到async这个属性了. async:true,(默认),异步方式,$.Ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.Ajax里的success方法,这时候执行的是两个线程. async:false,同步方式,所有的请求均为同步请求,在没有返回值之前,同步请求将锁住

Ajax同步异步;get和post

Ajax步骤: 1.新建XMLhttpRequest var xhr=new XMLhttpRequest 2.打开请求:xhr.open(参数1,参数2,参数3): 参数1:get还是post 参数2:请求路径 参数3:是否异步——true异步/false同步 3.发送请求:xhr.send(要发送的信息) 4.判断响应是否成功 status==200 同步和异步的区别: 异步时需要监听readyState的值是否为4(readstate:判断后台是否完全将数据成功) xhr.onreadys

jquery的ajax同步和异步

之前一直在写JQUERY代码的时候遇到AJAX加载数据都需要考虑代码运行顺序问题.最近的项目用了到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除. 而异步则这个AJAX代码运行中的时候其他代码一样可以运行. jquery的async:false,这个属性 默认是true:异步,false:同步. $.ajax({ type: "post", url: "