javascript - 如何在 Javascript 中执行线程

标签 javascript jquery multithreading jquery-ui progress-bar

所以我有一个从服务器返回的大型 JSON 对象,然后从中构建数据表并将其显示在表单上。这通常需要几秒钟..所以我在想一个加载栏。 我有加载栏背后的逻辑,但是构建 hmtl 数据的循环正在锁定浏览器,我无法调用我需要更新的元素。

这是我执行此操作的函数:

function buildDataTable(db_table, container_id) {
    var $pb = $("<div id=\"progress-bar\"></div>");
    $(container_id).html($pb);
    $pb.progressbar({
        value: 0
    });
    $.post("post location", {
        view: "all"
    }, function (data) {
        var headers = "";
        var contents = "";
        var jsonObject = $.parseJSON(data);
        var tik = Math.round(jsonObject.length / 100);
    for (key in jsonObject[0]) {
            headers += "<th>" + key.replace(" ", "&nbsp;") + "</th>";
        }
        for (i in jsonObject) {
            contents += "<tr>";
            for (j in jsonObject[i]) {
                contents += "<td class=\"border-right\">" + jsonObject[i][j] + "</td>";
            }
            contents += "</tr>";
            if(Math.round(i/tik) == i/tik) {
/* if I run the alert (between popups) i can see the progressbar update, otherwise I see no update, the progressbar appears empty then the $(container_id) element is updated with the table i've generated */
                alert(''); 
                $pb.progressbar("value",i/tik);
            }
        }
        var html = "<table cellpadding=\"5\" cellspacing=\"0\"><thead><tr>" + headers + "</tr></thead><tbody>" + contents + "</tbody></table>";

        $(container_id).html(html);
        $(container_id).children("table:first").dataTable({
            "bJQueryUI": true,
            "sScrollX": "100%"
        });
    });
}

最佳答案

[添加我的评论作为答案]

JavaScript 是单线程的。您必须将您的工作分解成多个部分并使用“setTimeout”按顺序调用它们,以允许 GUI 在处理过程中(在您的调用之间)更新,但即便如此,浏览器似乎仍然有些无响应。

关于javascript - 如何在 Javascript 中执行线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6998330/

相关文章:

javascript - 普通JS : Reveal only the next element at the same parent group

javascript - 如果文件存在于 ASP.NET MVC 中的文件夹中且文件名存在于数据库中,则在编辑时使用 fileUpload 显示文件名

javascript - 按钮内的复选框?

javascript - Mongoose:如何在变量中创建特定的字段标准

javascript - 我的 php 未在我的 Javascript 中解释

javascript - 循环遍历数组中的特定索引

javascript - 检测来自不同 DOM 元素的数据变化

java - 我可以在并行运行的多个线程中使用同一个实例吗?

c - 多线程 - 比单线程慢

c++ - 寻找提供类似于 Google Go channel 功能的 C 或 C++ 库