1

以前の質問から、一連のPOSTリクエストをまとめてコードチェーンを修正する必要があるという提案を受けましたが、これを実現する方法がわかりません。具体的には、私が与えられたアドバイスは次のとおりでした。

投稿を起動し、成功ハンドラーに次の投稿を起動させるなど...そして、すべての投稿が完了すると、最後の投稿の成功ハンドラーがgetを起動します

この戦略は私には理にかなっていますが、実装方法がわかりません。POSTへのすべての呼び出しが完了する前にGETへの呼び出しを防止しようとしています。現在、$.when.applyGETの送信を遅らせるために実装しました。そのためのコードは次のとおりです。

function(){ 
$.when.apply(undefined, InsertTheAPPs()).done(function () {
$.ajax({
url: sURL + "fileappeal/send_apps_email",
success: function() {  
    var m = $.msg("my message",
    {header:'my header', live:10000});
    setTimeout(function(){
        if(m)m.setBody('...my other message.');             
    },3000);
    setTimeout(function(){
        if(m)m.close(function(){
              window.location.replace(sURL+'client/view');
        });
    },6000);
    $('#ajaxShield').fadeOut(1000);},
error: function(){
    $.msg("error message",
    {header:'error header', live:10000});
    }
}); 
}); 
}

jQuery$.eachループのコードは次のとおりです。これは、開始するだけでなく、上記のfileappeal/send_apps_emailへのajax呼び出しの前に終了する必要があるコードです。

function InsertTheAPPs(){
$('input[name=c_maybe].c_box').each(function(){         
    var jqxhrs = [];
    if($(this).prop('checked')){ 
        var rn = $(this).prop('value'); 
        jqxhrs.push(
            $.ajax({
            url: sURL + 'fileappeal/insert_app',
            type:"POST",
            dataType: 'text',
            data: {'rn': rn},
            error: function(data) {console.log('Error:'+rn+'_'+data);}
            })
        )
    return jqxhrs;
    } 
}); 
}

複数のPOST呼び出しを連鎖させる戦略を実装するために、上記のコードを変更する方法を誰かが示すことができますか?

4

1 に答える 1

2

から戻らないでください.each。それはそのようには機能しません。代わりにこれを行います:

var jqxhrs = [];
$(...).each(...
});
return jqxhrs;

の戻り値には何も割り当てられて.eachいませんが、とにかく取得することはできません。それぞれから戻ると、ブレーク/コンティニューのように使用できますが、これはコンテキストでは意味がありません。

さらに、var jqxhrs各ループの内部により、ループの各反復でそのコンテキストで新しい変数が宣言されます。

于 2013-01-30T16:51:46.873 に答える