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
    评论

报告相同问题?

悬赏问题

  • ¥20 Html备忘录页面制作
  • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
  • ¥20 数学建模来解决我这个问题
  • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?
  • ¥15 django5安装失败