1

アイデアは、サーバーのタイムアウトを取得せずにサムネイルのヒープを生成することです。そこで、jQueryを使用してajaxで1つずつ実行します。

一連のファイル名を実行し、サーバーに各ファイルの画像を生成するように要求するJavaScriptループがあります。この場合、それは約300以上のファイルの問題です。

ファイルを実行し、別の関数を使用してajaxリクエストを実行します。一番上のループは、現在処理中のファイルを表示したいと考えています。ただし、トップループの実行中は、ページがハングしているように見えます。なんで?(ご覧のとおり、ajaxを呼び出す前に1秒待ってみましたが、うまくいきませんでした。)

    function mkImgAll() {
        $.ajaxSetup({ async: true });
        var files = $('.files');
        debugClear();
        for(i=0;i < files.length;i++) {
            var id=files[i].id;
            var file=files[i].value;
            debugSay(id+' '+file);     // <- This does not display 
            sleep(1000);               //                until the  
            mkImg(id, file);           //        loop has finished.
        }
        $.ajaxSetup({ async: ajaxAsyncDefault });
    }

    function mkImg(id, file){
        $('#ajaxWaiting').show(1);
        $.ajax({
            type : 'POST',
            url : 'includes/ajax.php',
            dataType : 'json',
            async: false,
            data: {
                'proc' : 'makeOneThumb',
                'id' : id,
                'file' : file
            },

ところで、debugSay関数はこれを行います:

    function debugSay(say) {
        if(debug) {
            $("#debugMessage").append("<xmp>"+say+"</xmp>");
        }
    }
4

3 に答える 3

2
$.ajax({
....
async: false,

リクエストは非同期ではありません。async を true に設定する必要があります。 async: false の使用は、jquery 1.7 から廃止されました。

于 2012-06-28T16:18:21.167 に答える
0

setTimeout でデバッグを呼び出そうとします...

于 2012-06-28T16:19:42.057 に答える
0

ロングショットですが、これを試すことができます:

if (debug) {
    var dummy = $("#debugMessage").append("<xmp>"+say+"</xmp>").get(0).offsetLeft;
}

これにより、ブラウザーが sleep() にロックされる前に、ページが強制的に更新されます。ループが実際にそこで一時停止する必要がない限り、setTimeout()代わりに使用することをお勧めします。sleep()

于 2012-06-28T16:23:55.143 に答える