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

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀