$each中想对遍历的数据逐一进行ajax处理

在实际项目中会遇到each循环出来的数据  都去进行ajax去处理的情况 但是写在循环中去ajax是不可行的

为什么不可行?

因为遍历的数据和ajax并不能顺序执行 而是遍历完ajax还在处理中导致无法实现

循环是为了循环这个操作,而异步处理本身的意义就是为了不影响当前操作去实现的操作,所以循环在做这件事的时候

是不会去在乎你ajax是不是好了,俩个相当于没有任何先后顺序而言。


解决方案是 第一步先将需要处理的数据 遍历出来放入一个数组或集合中
然后在调用ajax去处理这个数组中的一个个对象 递归处理 这样就可以每个数据都进行了ajax

 

eg:

var strattr=new Array();
                    $('input[name="AddorUpData"]').each(function (i, v) {                                           
                        var datetime = $(v).data("datetime");
                        var airline = $(v).data("airline");
                        var gateway = $(v).data("gateway");
                        var ids = strid;
                        var str = {"datetime":datetime ,"airline":airline,"gateway":gateway ,"ids":ids,"tishi":$(v).parent()};
                        strattr.push(str);                
                    });
                    var times = strattr.length;
                    istrue(times,strattr,strid);

        //循环已经存在数据进行判断是否符合选中团条件 times是指数组长度 strArr是遍历数组 strid是通过之后去加载有效数据的参数
        function istrue(times, strArr,strid)
        {
            if (times <= 0) {
                //表明所有参数都已经验证通过 那么就去加载下拉框数据
                $.ajax({
                    url: "/AffordableWorld/PackageInfo/DepartureDateLIst",
                    type: "POST",
                    traditional: true,
                    data: {
                        "info": strid,
                        "adminKey": $("#hiddKey").val()
                    },
                    success: function (result) {
                        //先清空子元素
                        $("#Departdate").empty();
                        if (result.length > 0) {
                            //有满足的日期加载 然后在加载airline                                                                

                            $.each(result, function (i, item) {
                                var d = ChangeDateFormat(item.DepantureDate);//格式化日期
                                $("#Departdate").append("<option>" + d + "</option>");
                            });
                            GetAirline();
                        }
                        else {
                            //没有满足的条件就清空 影响的后俩个下拉框的子元素
                            $("#Airline").empty();
                            $("#Gateway").empty();
                            $("#Sold").text("");
                            $("#Sold").attr("value", 0);
                        }

                    }

                });

            }
            else {
                //检查参数是否满足 1.查出来的数据总和是不是和团数目相同 2.如果满足现查sold
                var temp = times - 1;
                $.ajax({
                    url: "/AffordableWorld/PackageInfo/IspackageUsable",
                    type: "POST",
                    traditional: true,
                    data: strArr[temp],
                    success: function (result) {
                        if (result == -1) {
                            //不满足条件 数据不兼容
                            check = "nopass";
                            strArr[temp].tishi.append("<span style='color:red'>*The newly selected group does not satisfy the information that currently exists</span>");
                            $("#Departdate").empty();
                            $("#Airline").empty();
                            $("#Gateway").empty();
                            $("#Sold").text("");
                            $("#Sold").attr("value", 0);
                            return false;
                        }
                        else {
                            strArr[temp].tishi.prev().prev().text(result);
                            times--;
                            istrue(times, strArr,strid); //递归调用    
                        }
                    }

                });
                
            }
           
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值