【发布时间】:2012-05-19 20:41:00
【问题描述】:
我有一个发送 X 邮件的 PHP 进程 每次发送邮件后,我都会在数据库中添加一行以告知已发送邮件。
所以,我不想创建一个进度条来告诉用户 X 邮件是在 Y 发送的(Y = 总数)
我有两个这样的 jquery 函数:
function mail_send()
{
$('.loading').css('display','block');
$.ajax({
'url': '/an/url/',
'data': {
someParam: param
},
'beforeSend':function()
{
$('#loadingBg').append('<span id="count"></span>');
setTimeout(function () {
mail_updateProgress(id);
}, 500);
}
,
'success': function (data,textStatus)
{
(....)
}
});
}
function mail_updateProgress(id) {
$.ajax({
'url': '/an/url/',
'data': {
someParam: param
},
'success': function (data) {
var res = $.parseJSON(data);
$('#count').html(res.nbSended + '/' + res.total);
}
});
}
问题是我现在不能发送超过 15 封邮件,我不会创建 XXX 邮件地址来测试它,但是 updateProgress() 函数只成功了一次,而且它发生在同一时间mail_send() 函数。
有错误吗?
谢谢
编辑: 好的,所以 setInterval 很好,但我还有第二个问题,$.ajax 有队列吗? 我正在登录 3 件事: first : 当进程进入 updateProgress 函数时 第二:当updateProgress ajax成功时 第三:当 mail_send() ajax 成功时
日志的顺序是
第一次(X 次) 第三次(1次) 秒(X 次)
所以,我的进度条永远不会进步,只是在发送功能结束时使 0% => 100%
在发送函数的同时处理进度函数有什么想法吗? 可以委托吗?
【问题讨论】:
-
id变量的意义何在?您似乎没有在任何地方使用它 - 您没有向我们展示更多代码吗? -
我已经“修改”了我的代码给你看,我真的在使用它;)
-
您可能希望将 updateProgress 移至成功?你为什么要在发送前检查它?你如何发起mail_send
-
我在开始我的 send() ajax 之前初始化我的 setInterval,但我想每 500 毫秒检查一次进度