课设调试错误(五)循环内ajax请求错乱问题

今天做课设,让我遇到了一件最诡异不过的事情。因为我已经改完了,忘记把错误的地方截图了,就在这里简单描述一下:我把要展现的药名储存在一个var数组中,然后for循环依次根据药名去数据库中检索相关信息再加载到网页上,然后让我奇怪的地方来了:按照常理来说应该是每一行的信息都是一种药物的,然后药物名称显示的却都是最后一种药物的(for循环最后一次的药物),其他的信息却是原本的药物的!也就是说,除了名字以外都是正常的!

这真的让我困惑不已,因为如果一行数据全部错误还好,说明代码逻辑出了问题,但是这种有的对有的不对的情况就非常难以解释,最后我上网查询了一下ajax请求错乱的问题,终于发现了问题所在:

原因就在于for循环是一个单线程的东西,而ajax是多线程的,之所以称之为异步同步,是因为执行到ajax的时候去后台开启了一个线程,但是for循环本身就是一个单线程的东西,那么执行到ajax的时候,ajax开启了一个线程,for循环是没有等他的,知道for循环结束的时候,才会把ajax返回的数据拿回来,所以会出问题。
我的理解就是for循环的速度和ajax请求的速度不一致,导致有些内容是传输过来有些内容还没有传输过来就到下一个for循环了。

解决办法:利用递归
只需要改变for循环判断的结束的位置,为每次循环的异步请求结束时,再进行下一次的循环。
可以在原本for循环中把代码写到function里面再执行,也可以直接递归执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值