JavaScript Jquery停止每个函数,阻止按钮


JavaScript Jquery stoping each function, blocked buttons

我尝试用jQuery发送电子邮件,我想通过单击按钮开始和中断发送。

var arr;
function loadArray(table){ arr = table.data;}
function init(){
    $('#start').click(function(){
        $.each(arr, function( key, value ){   
            if(value !== null){
                var emailTemplate = value['emailTemplate'];
                var email = value['email'];
                var campaign = value['campaign'];
                sendAnEmail(emailTemplate, email, campaign, key);
                arr[key] = null;
            }
            console.log(arr);
            $(this).click(function(){
                return false;
            });
        });
    });
}
function sendAnEmail(template, email, campaign, num){
    $.ajax({
        type: "POST",
        dataType: "json",
        async: false,
        data: { template: template, email: email, num: num, campaign: campaign },
        url: Routing.generate('wyslij_email'),
        success: function(msg){             
            if(msg.status == 'success'){
                var count = parseInt($('.sended').text());
                $('.sended').text(count+1);
            }else{
                var count = parseInt($('.error').text());
                $('.error').text(count+1);
            }
        }
    });
}

我创建了一个简单的init函数,它运行良好。单击#启动后,它将启动每个功能。当每个功能循环时,我都无法点击任何按钮。

我认为AJAX通过async=false来阻止它;这是真的吗?

我的问题很简单。为什么它不起作用?

不要使用async: false,因为它会阻塞脚本!

如果你需要它们一个接一个地发送,你可以用循环建立一个堆栈,然后一个接地发送(例如…):

//outside function context (global variable)
var stack = [];
//in loop, instead of calling the function
stack.push({template: template, email: email, num: num, campaign: campaign});
//after loop:
stack.reverse(); //if you need them to be in the order they got created....if not, just erase this line
sendData();
function sendData(){
   if(stack.length > 0){
      $.ajax({
         type: "POST",
         dataType: "json",
         data:stack.pop(), //get next entry
         async:true, //or delete this line, since true is default
         url: Routing.generate('wyslij_email'),
         success:function(msg){
             if(msg.status == 'success'){
                var count = parseInt($('.sended').text());
                $('.sended').text(count+1);
                sendData(); //recurse to next stack item
             } else {
                var count = parseInt($('.error').text());
                $('.error').text(count+1);
             }
         }
      });
   }
}