0

複数のファイルをアップロードするために、JavaScriptを使用してファイルをループしています。ファイルをアップロードするには、jQueryフォームプラグインhttp://archive.plugins.jquery.com/project/formを使用しています

これで、ループが実行されると、ループの最後まで即座に実行され、すべてのファイルが一度にアップロードされます。

各アップロード中にループを保留する方法はありますか?

これは、使用しているループの例です(実際のコードは非常に大きいです)

for(i=0;i<=num;i++)
{
    if(go1){
        <?php //if 1 upload only, hide add and upload button ?>
        $('#ad,#ok').hide();
        var z=i;
        $('#up'+i).ajaxSubmit({
            dataType:"json",
            beforeSubmit:function(before){
                $('#loadingsignup').show;
                $("#resultsignup").empty().hide();
            },
            success:function(retour){
                res=retour;
                if(num<1){  <?php // only one upload, redirect if uploaded correct, reintroduce upload button if error ?>
                    if(res.ok=="ok"){
                        window.location.replace('<?php echo $config['baseurl']; ?>/player/'+res.aid);
                    }else{
                        $('#rs'+z).append('<div class="pasgood">'+res.err+'</div>').show();
                        $('#ad,#ok').show();
                    }
                }
            }
        }); 

    }
}

アップロードを一度に1つずつ移動するには、ループが本当に必要です。

4

2 に答える 2

2

いいえ、ループは同期ですが、アップロードは非同期です。アップロードを次々に実行したい場合は、最初の成功コールバックから2番目のアップロードを起動する必要があります。

function upload(i, suc, err) {
    if (i > num)
        return suc();
    $('#up'+i).ajaxSubmit({
        dataType:"json",
        beforeSubmit:function(before){
            $('#loadingsignup').show();
            $("#resultsignup").empty().hide();
        },
        success:function(res){
            if(res.ok=="ok"){
                $('#ad,#ok').show();
                upload(i+1, suc, err); // next one
            } else {
                $('#rs'+i).append('<div class="pasgood">'+res.err+'</div>').show();
                err(res.err); // or continue with the rest?
            }
        },
        error: err
    });
}
upload(0, function allDone(){
    window.location.replace('<?php echo $config['baseurl']; ?>/player/');
}, function somethingWrong(){ … });
于 2012-10-22T01:17:05.017 に答える
-1

パラメータasync: falseとして使用します。$.ajax()これにより、ファイルを一度に送信することを回避し$.ajax、リクエストの実行が完了するまで待機し、サイクルは次のアイテムに進みます。

DOCS:デフォルトでは、すべてのリクエストは非同期で送信されます(つまり、これはデフォルトでtrueに設定されています)。同期リクエストが必要な場合は、このオプションをfalseに設定してください。クロスドメインリクエストとdataType:「jsonp」リクエストは同期操作をサポートしていません。同期リクエストはブラウザを一時的にロックし、リクエストがアクティブな間はアクションを無効にする可能性があることに注意してください。jQuery 1.8以降、jqXHR($ .Deferred)でのasync:falseの使用は非推奨になりました。complete / success/errorコールバックを使用する必要があります。

しかしとにかく、同期的な実行が必要です。

于 2012-10-22T01:04:21.483 に答える