我尝试用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,它工作正常。点击#start后启动每个功能。当每个函数循环我都无法点击任何按钮。
我认为AJAX通过async = false来阻止它;这是真的吗?
我的问题很简单。为什么它不起作用?
答案 0 :(得分:1)
请勿使用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);
}
}
});
}
}