1

我收到了一个来自先前问题的建议,我需要一起修改我的代码一系列 POST 请求,但我不知道如何完成此操作。具体来说,我得到的建议是:

触发一个帖子,让其成功处理程序触发下一个帖子,等等......然后当所有帖子完成后,最后一个帖子的成功处理程序触发 get

这个策略对我来说很有意义,但我不知道如何实施。我试图在所有对 POST 的调用完成之前阻止对 GET 的调用。目前,我已经实现$.when.apply了延迟 GET 的发送。这是代码:

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 回答