我有一个发送X邮件的PHP进程在每次邮件发送后,我在数据库上添加一行,告诉他们发送邮件。
所以,我不想创建一个进度条告诉用户X上的邮件被发送(Y =总数)
我有两个类似的jquery函数:
function mail_send()
{
var refreshIntervalId;
$('.loading').css('display','block');
$.ajax({
'url': '/an/url/',
'data': {
someParam: param
},
'beforeSend':function()
{
$('#loadingBg').append('<span id="count"></span>');
refreshIntervalId =setInterval(function () {
mail_updateProgress(id);
}, 500);
}
,
'success': function (data,textStatus)
{
(....)
clearInterval(refreshIntervalId);
javascript: console.log(' send finish !!!');
}
});
}
function mail_updateProgress(id) {
javascript: console.log('updatePG');
$.ajax({
'url': '/an/url/',
'data': {
someParam: param
},
'success': function (data) {
var res = $.parseJSON(data);
javascript: console.log(' => data received ' + res.nbSended);
$('#count').html(res.nbSended + '/' + res.total);
}
});
}
$ .ajax有队列吗?我登录3件事:第一:当进程在updateProgress函数上输入第二:当updateProgress ajax成功第三时:当mail_send()ajax成功时
日志的顺序是:
所以对我而言,它告诉我有一个ajax调用的队列。但是我怎样才能执行我的进度条呢?
编辑: 它可能是一个php配置问题,
有人可以告诉我如何允许来自同一个流程的多连接?
答案 0 :(得分:1)
您可能遇到的问题是,Web浏览器的任何域运行的并发Web请求不超过2个。您正尝试使用此功能填充这两个插槽。如果不了解有关您正在构建的应用程序的更多信息,那么这就是我现在可以猜到的所有信息。
我认为,更好的方法是考虑终止您的邮件发送请求的客户端连接,并在客户端终止之后继续该过程。这将为您的浏览器释放一个http请求插槽,并且应该允许您的mailProgress ajax函数继续按写入方式运行,而不必担心队列等等。
这是关于忽略客户端终止的另一个Stack Overflow问题:Can a PHP script continue running after ending the HTTP request?
以及一篇博文,其中详细介绍了如何操作(在上面的Stack Overflow问题中也有链接):http://waynepan.com/2007/10/11/how-to-use-ignore_user_abort-to-do-process-out-of-band/
希望有所帮助。
答案 1 :(得分:0)
我认为你正在寻找$.done()