• ajax的循环


    一、业务需求

    在开发中,当一个列表页面加载完成后,我需要根据列表每一项的id去服务器端获取对应的数据然后再把获取的数据赋给当前id对应的标签。

    例如如下表格:

    我有一系列的商品编号,我需要根据商品编号通过ajax到服务器获取商品对应的名称,然后再用js更新界面(实际中的业务当然不是获取商品名称这么简单)

    二、实现方案

    2.1 错误方案

    一般情况下,我们会直接想到,直接写个for循环,在循环内发起ajax请求获取数据,再把获取的数据更新到对应的id对应的标签上,

    如下:

    我们以数组模拟一些列id:

    var array = [1, 3, 2, 5, 3];

    循环的ajax请求方法:

    function foreach_ajax() {
            for (var i = 0; i < array.length; i++) {
                $.get("/home/loop_ajax", { value: array[i] }, function (data) {
                    console.log(array[i]+","+data);
    
                });
            }
           
        }

    调用:

    $(function () {
            foreach_ajax();      
        });

    测试结果如下:

    我们可以看到,在循环的内部我们根本取不到array[i]的值。

    导致这种结果的原因是:ajax是异步执行的,在循环结束的时候第一次ajax还没有将服务器数据返回,而循环结束的时候for中的变量i已经释放了,所以array[i]=undefined

    2.2 正确方案

    正确的方式是以递归的方式循环ajax

    如下:

    我们以数组模拟一些列id:

    var array = [1, 3, 2, 5, 3];

    递归的ajax请求方法:

    function Loop_ajax(index, array) {
            if (index < array.length) {           
                var value = array[index];
                $.get("/home/loop_ajax", { value: value }, function (data) {
                    console.log(array[index] + "," + data);
                    if (index < array.length) {
                        Loop_ajax(index + 1, array);                    
                    }
    
                });
            }
        }

    调用:

     $(function () {
           Loop_ajax(0, array);
        });

    测试结果如下:

  • 相关阅读:
    越狱-监狱地图
    老K说故事系列(003)
    老K说故事系列(001)
    面向对象软件开发培训
    别让思想老去,重燃激情火焰
    软件产品界面设计-培训PPT发布
    读“道法自然”的非技术有感
    老K说故事系列(002)
    游戏规则
    基于C# Socket实现多人网络聊天室
  • 原文地址:https://www.cnblogs.com/eggTwo/p/5952955.html
Copyright © 2020-2023  润新知