我有一个PHP进程发送X邮件 每次发送邮件后,我在数据库上添加一行来告诉邮件已发送。
所以,我不想创建一个进度条来告诉用户 X 邮件是在 Y 上发送的(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 件事:第一:当进程在更新进度函数上输入时 第二:当更新进度 ajax 成功时 第三:当 mail_send(( ajax 成功时
日志的顺序是:
- updatePG => 100 次(我已经在我的 PHP 代码中睡了一觉来测试它(
- 发送完成!! => 1 次
- => 收到 11 的数据 => X 次(我已经发送了 11 封邮件(
所以对我来说,ajax 调用有一个队列。但是我该如何执行我的进度条呢?
编辑:这可能是 php 配置问题,
有人可以告诉我如何允许来自同一进程的多连接?
您可能会
遇到以下问题:Web 浏览器设计为为为任何域运行的并发 Web 请求不超过 2 个。 您正在尝试使用此功能填充这两个插槽。 如果不了解有关您正在构建的应用程序的更多信息,那么这就是我现在所能猜测的全部内容。
我认为,更好的方法是考虑终止邮件发送请求的客户端连接,并在客户端终止之后继续该过程。 这将为您的浏览器释放一个 http 请求槽,并且应该允许你的 mailProgress ajax 函数继续按写入的方式运行,而不必担心队列等。
这是另一个关于忽略客户端终止的堆栈溢出问题:PHP 脚本在结束 HTTP 请求后是否可以继续运行?
以及一篇博客文章,其中包含有关如何执行此操作的更多详细信息(在上面的堆栈溢出问题中也链接(: http://waynepan.com/2007/10/11/how-to-use-ignore_user_abort-to-do-process-out-of-band/
希望有帮助。
我想你正在寻找$.done((