0

我正在尝试创建一个 jquery 函数,它将 XML 数据导入到 wordpress 站点。在此过程中,我希望它单独导入帖子,然后在每次导入完成时更新进度条和/或计数器。

我遇到的问题是进度更新似乎都被推迟了,直到整个过程完成,然后同时更新。

例如:不是用 1/100 完成,然后 2/100 完成来更新页面,而是等待到最后,然后同时添加所有 100 个更新。

希望我的代码能比我更好地解释它:S

// Send inital data to check XML feed
$.ajax({
    url: ajaxurl,
    type: 'POST',
    data: ajaxdata
}).done( function(response) {

    ...

    // Process XML data
    $('#progress').html('<h3>Import Progress</h3><p id="import_status"></p>');

    data2 = $("#form_name").serialize();

    finished = false;
    count = 0;

    while (!finished) {

        var ajax = $.ajax({
            url: ajaxurl,
            data: data2,
            type: 'POST',
            async: false
        }).done(
            function(response2) {
                if (response2 == 0) {
                    finished = true;
                } else {
                    count++;
                    split = response2.toString().split("::");
                    $('#progress').append('<p><strong>Item'+count+'/'+split[0]+'</strong><br/><strong>Status:</strong> '+split[1]+'</p>');
                    if (count >= split[0]) {
                        finished = true;
                    }
                }
            }
        );

    } // while

    $('#progress').append('<p>Import Complete!</p>');

    ...

}

ajaxurl 的 php 文件在正确的位置返回它应该返回的内容。对于上下文,在 while 循环期间,php 文件返回如下字符串:

    100::Some Status Information

其中 100 是将返回的总行数。

循环运行正确的次数并在完成时输出所有正确的信息......但它不会逐项输出......它同时输出所有信息。

我错过了什么?我怎样才能让它分别输出每个项目的状态报告?

谢谢你的尽心帮助。

编辑:只是一些额外的信息,<h3>ImportProgress</h3>直到while循环完成后才会出现!全部出现一次!

4

1 回答 1

0

据我了解,Javascript 在单个线程中运行,因此while迭代会阻止页面的执行和呈现。

为了在进程运行时显示 Javascript 的进度,您应该重构代码,以下答案显示了一种方法:显示 javascript 执行进度

希望能帮助到你。

于 2013-02-05T19:15:10.397 回答