在处理 ajax 函数的同时处理 ajax 函数


Process an ajax function while an ajax function

我有一个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((