ajax如何循环lis,关于js中循环遍历中顺序执行多个嵌套ajax的问题
就是业务上需要完成一个功能,这个功能需要依次调用四个接口,后面接口的参数都依赖于前一个接口的返回值。
类似这样:
var objArr = "从其他逻辑获得";
for(var n in objArr){
$.ajax({
type : 'post',
url : '../xxx/xxxx',
data : {param:objArr[n].xxx},
async : false,
secureuri : false,
contentType : "application/json;charset=utf-8",
dataType : 'JSON',
success : function(data) {
$.ajax({
type : 'post',
url : '../xxx/xxxx',
data : {param:data.xxx},
async : false,
secureuri : false,
contentType : "application/json;charset=utf-8",
dataType : 'JSON',
success : function(data1) {
$.ajax({
type : 'post',
url : '../xxx/xxxx',
data : {param:data1.xxx},
async : false,
secureuri : false,
contentType : "application/json;charset=utf-8",
dataType : 'JSON',
success : function(data2) {
$.ajax({
type : 'post',
url : '../xxx/xxxx',
data : {param:data2.xxx},
async : false,
secureuri : false,
contentType : "application/json;charset=utf-8",
dataType : 'JSON',
success : function(data3) {
if(n = data3.length){
alert("全部完成");
}
}
});
}
});
}
});
}
});
}
但是事实不与愿为,因为什么呢?这个js里的循环,每次都是自顾自的走,它不等ajax执行好走完到success代码,就继续循环下一条数据了,这样数据就全乱了。
后来,想到试试ajax里async这个属性,async默认是true,即为异步方式,那我改为false同步行不行呢?答案是也是不行,阻塞在那了。
然后把每一个ajax都写一个方法,调相应的方法,测试也是无效。
最后搞半天换了个思路,不是从技术上解决的,这个问题的关键是循环数据的时候,ajax的数据是依赖等待返回的,只要涉及到遍历循环,那这个问题就肯定存在。
那能不能避开循环呢?想到一个方法,这四个ajax分别写四个方法,这四个方法都有固定的两个参数,一个是我们要使用的数据objArr,一个是一个计数器num,这样
var objArr = "从其他逻辑获得";
for(var n in objArr){
xxxA(objArr,0);
}
function xxxA(objArr, num){
$.ajax({
type : 'post',
url : '../xxx/xxxx',
data : {param:objArr[num].xxx},
async : false,
secureuri : false,
contentType : "application/json;charset=utf-8",
dataType : 'JSON',
success : function(data) {
xxxB(objArr, num, data);
}
});
}
function xxxB(objArr, num, back){
$.ajax({
type : 'post',
url : '../xxx/xxxx',
data : {param:back.xxx},
async : false,
secureuri : false,
contentType : "application/json;charset=utf-8",
dataType : 'JSON',
success : function(data1) {
xxxC(objArr, num, data1);
}
});
}
function xxxC(objArr, num, back){
$.ajax({
type : 'post',
url : '../xxx/xxxx',
data : {param:back.xxx},
async : false,
secureuri : false,
contentType : "application/json;charset=utf-8",
dataType : 'JSON',
success : function(data2) {
xxxC(objArr, num, data2);
}
});
}
function xxxD(objArr, num, back){
$.ajax({
type : 'post',
url : '../xxx/xxxx',
data : {param:back.xxx},
async : false,
secureuri : false,
contentType : "application/json;charset=utf-8",
dataType : 'JSON',
success : function(data3) {
if(num = arrObj.length-1){
69 alert("全部完成");
70 }else{
71 xxxA(objArr,num+1);
72 }
}
});
}
它的大致思路是 分为四个方法,每个方法都有两个参数,一个要遍历的数据,一个计数器,BCD三个方法还有个参数,就是上一个方法返回的数据, 先调A,A里面再调B,B里面再调C,C里面再调D,D里面判断一下,如果num = arrObj.length-1就代表全部走完,没有就继续再调A,依次循环。
关于js中循环遍历中顺序执行ajax的问题(vue)
js里的循环,每次都是自顾自的走,它不等ajax执行好走完到success代码,就继续循环下一条数据了,这样数据就全乱了. 后来,想到试试ajax里async这个属性,async默认是true,即为异 ...
Java循环遍历中直接修改遍历对象
Java 循环遍历中直接修改遍历对象如下,会报异常: for (ShopBaseInfo sp: sourceList) { if(sp.getId()==5){ sourceList.remove( ...
JAVA中循环遍历list有三种方式
转自:https://blog.csdn.net/changjizhi1212/article/details/81036509JAVA中循环遍历list有三种方式for循环.增强for循环(也就是常 ...
js 各种循环遍历
js 各种循环遍历(表格比较) 遍历方法 能否遍历数组 能否遍历对象 备注 for 能 不能 for in 能(有诸多缺点) 能 为遍历对象而设计的,不适用于遍历数组 forEach 能 不能 bre ...
js并行加载,顺序执行
js并行加载,顺序执行 运行脚本或加载外部文件时,会阻塞页面渲染,阻塞其他资源的加载.如果页面中需要加载多个js文件,在古老浏览器中性能会比较糟糕. 因此有了最原始的优化原 ...
jquery each循环遍历完再执行的方法 因为each是异步的 所以要加计数器.
query each循环遍历完再执行的方法因为each是异步的 所以要加计数器.var eachcount=0;$(“.emptytip”).each(function(){ eachcount++c ...
jquery each循环遍历完再执行的方法
jquery each循环遍历完再执行的方法 因为each是异步的 所以要加计数器. var eachcount=0;
$(".emptytip").eac ...
Python的list循环遍历中,删除数据的正确方法
在遍历list,删除符合条件的数据时,总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) for i in range(len(num_lis ...
随机推荐
jQuery之$(document).ready()使用介绍
学习jQuery的第一件事是:如果你想要一个事件运行在你的页面上,你必须在$(document).ready()里调用这个事件 学习jQuery的第一件事是:如果你想要一个事件运行在你的页面上,你必须 ...
【WCF--初入江湖】01 WCF编程概述
01 WCF编程概述 SOA的优点 1.服务独立于平台和工作环境.服务并不关心自己所处的环境,也不关心与之进行通信的服务所处的 环境. 2.服务相互隔离. 3.服务对协议.格式和传输中立. 4. ...
ES6学习笔记(二)
1.数组的解构赋值 基本用法 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前,为变量赋值,只能直接指定值. var a = 1; va ...
MYSQL 退出的三个方式
方式1: exit 方式2: quit 方式3: \q
七、cocos2dx之粒子系统
本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=66 一.介绍 粒子系统指的是一个使用大量很小的精灵或者其他的一些绘制对象模拟一些模糊效果.使用传统的 ...
MySQL 字符串连接CONCAT()函数
MySQL字符串连接函数 使用方法:CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串, ...
python读写文件\r\n问题
newline controls how universal newlines mode works (it only applies to text mode). It can be None, ' ...
解决pycharm启动慢
xms -xmx相关参数设置 打开pycharm的安装目录 D:\PyCharm\PyCharm 2018.2.3\bin下文件pycharm.exe.vmoptions修改默认(版本2016.2)的 ...
10.4 再探迭代器-插入/IO/反向
10.4.1 插入迭代器 插入迭代器接受一个容器,生成一个迭代器,通过向该迭代器赋值可以实现向容器添加元素 (1)back_inserter: 接受一个参数, 示例: auto iter = back ...
第一章 HTML+CSS(上)
HTML 网页的组成 HTML简介 HTML的语法 HTML的常用标签 HTML中的表格和表单 CSS的简单应用 我们这里使用WebStorm开发工具 配置浏览器 常用插件: CodeGlance 代 ...
ajax如何循环lis,关于js中循环遍历中顺序执行多个嵌套ajax的问题相关推荐
- js有时候不按正常的顺序执行
都知道js是单线程的,浏览器执行js也是按照代码顺序执行的,但是有时候,js不会按照从上到下的顺序执行,这是为什么呢? 执行doSendOneMessage()函数前有一个showSendSMSWai ...
- FLEX中Sequence实例教程. 顺序执行的效果.
效果: 代码: <?xml version="1.0" encoding="utf-8"?> <!-- http://blog.flexexa ...
- JS定时器同步异步问题(顺序执行)
定时器同步问题 场景 1.异步代码 代码如下(示例): console.log('1')setTimeout(() => {console.log('2')}, 1500);console.lo ...
- JavaScript(JS)前序遍历,中序遍历,后序遍历,层序遍历,图文详解两种(递归与迭代)实现的方式
1.二叉树的前序遍历 前序遍历首先访问根结点然后遍历左子树,最后遍历右子树. 在遍历左.右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树. 若二叉树为空则结束返回,否则: (1)访问根结点. ...
- l2-004 这是二叉搜索树吗?_LeetCode 例题精讲 | 11 二叉树转化为链表:二叉树遍历中的相邻结点...
本期例题: LeetCode 98. Validate Binary Search Tree 验证二叉搜索树(Medium) LeetCode 426. Convert Binary Tree to ...
- Leetcode 94. 二叉树的中序遍历 解题思路及C++实现
解题思路: 中序遍历的顺序是:左根右.所以需要使用一个栈来存储根节点(每一次push操作时,都相当于把该节点当成根节点了,然后再向其左节点探索). 程序中的大循环是:!s.empty() || roo ...
- 二叉树先序遍历,中序遍历,后序遍历,层次遍历学习总结及完整C/C++代码
伪代码阐述 先序遍历 先序遍历:先访问根节点, 然后深入左子树,直到不能深入时再深入右子树 由定义可得递归式 void travPre_R(BinNodePosi* x,VISIT& visi ...
- 基本题型记录-二叉树中序遍历
由于本人基础较差,所以针对部分题型做一个记录,以免自己忘记 1.二叉树中序遍历 这个遍历方法可以搜一下博客上很多讲解,这里主要是记录一下代码实现,以下面的二叉树为例子 结果应该是 2.迭代法 2.1 ...
- 二叉树的前序遍历,中序遍历,后序遍历
这三也是经典的二叉树的三种方法 二叉树的前序遍历 递归实现 public class Main4 {static ArrayList<TreeNode> list = new ArrayL ...
最新文章
- 聊聊成为大神路上的过程
- ipv6前缀长度计算_IPv6和IPv4中对比看RIP
- 第179天:javascript中replace使用总结
- 【SSL】使用Keytool工具生成证书及签名完整步骤
- mysql 数据复制停止工作_linux – Mysql GTID复制停止工作
- C++ 面向对象(一)—— 类(Classes)
- Win10 C盘空间越来越小怎么办
- 盘点云计算领域不可不读的9本书
- Oracle 触发器详解
- SpringBoot整合Redis及Redis工具类撰写
- ES6的这些新知识你记住了没?
- Atitit.获取swing ui 按钮控件的id 与名字 与JPDA 调试体系
- 基于单片机智能电子密码锁设计(毕业设计资料)
- 黑金花大理石_不同产地的黑金花大理石有哪些特点?
- 计算机重做系统 d盘,pe重装系统后原c盘变称了d盘如何解决
- 软件测试零基础入门好学吗?
- 没有标准答案的GIS问题
- 用anaconda启动Spyder报错
- 嵌入式设计实验三:Tasket与工作队列
- windows 10中如何删除新加硬盘中系统分区和恢复分区
热门文章
- 【无标题】电力监控系统如何实现用电实时监控-安科瑞 蒋静
- html下拉框显示多个,多选下拉框 js多值切换显示
- python画笑脸图案-怎么用python实现画笑脸
- 成为最有价值的汽车网站,易车还差点什么
- c#mvc过滤器之系统过滤器
- 钧测-房屋安全鉴定在什么时候需要做?
- java 遍历目录下所有文件_java实现遍历某个目录(包括子目录)下的所有文件
- VS+glfw编写openGL例子程序报错 0x59789958 (igd10iumd32.dll) 处有未经处理的异常解决思路
- python bbs论坛_十个基于Python的BBS论坛类开源web框架汇总(附源码地址)
- android+分享微信朋友圈带编辑功能,新功能 微信6.6.6安卓版发布:朋友圈编辑可保留...