weixin_33720956 2018-09-27 09:04 采纳率: 0%
浏览 38

JavaScript ajax行为

This is my first question, any suggestions on further questions will be appreciated.

When using the following code to update a table I don't see any updates, however when moving the TableList = {} into the success function, the table will update like intended.

Can someone give me an explanation to why I need to move the emptying of the object into the success block?

Answers I've read don't seem to help me understand any better.

function GetTableData() {
    TableList = {};

    $.ajax({
        url: "http://localhost:3000/info/",
        success: function (result) {

            //Moiving 'TableList = {}' here works fine

            for (var i = 0; i < result.length; i++) {

                TableList[i] = result[i];

            }
        }
    });
}

function UpdateTable() {
    GetTableData()
    //Update table cells
    setTimeout(function () {
        UpdateTable();
    }, 1000);
}
  • 写回答

1条回答 默认 最新

  • DragonWar% 2018-09-27 09:15
    关注

    $.ajax is asynchronous, so the response comes "later"

    You call GetTableData() ...

    • first thing it does is clear TableList
    • second thing it does is begin the asynchronous call
    • then it returns
    • Your code then updates using the EMPTY TableList (becuase it hasn't been filled yet)
    • some time later, TableList is filled
    • a second later, repeat the fruitless loop

    One solution is this

    function GetTableData(callback) {
        $.ajax({
            url: "http://localhost:3000/info/",
            success: callback
        });
    }
    
    function UpdateTable() {
        GetTableData(function(TableList) {
            //Update table cells
            setTimeout(UpdateTable, 1000);
        });
    }
    

    Now the following happens

    • call GetTableData()
    • ajax starts
    • when data is received, the success function calls the callback with the response as the first argument
    • your callback code updates the table cells
    • then initiates a timeOut to repeat the whole thing again
    评论

报告相同问题?

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上