0

XML データを wordpress サイトにインポートする jquery 関数を作成しようとしています。プロセス中に、投稿を個別にインポートし、インポートが完了するたびに進行状況バーやカウンターを更新したいと考えています。

私が抱えている問題は、プロセス全体が完了するまで進行状況の更新がすべて保留され、その後すべてが同時に更新されるように見えることです。

たとえば、ページを 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 で進行状況を表示するには、コードをリファクタリングする必要があります。次の回答は、それを行う方法を示しています: Show javascript execution progress

それが役に立てば幸い。

于 2013-02-05T19:15:10.397 に答える