-1

我有一个发送 X 邮件的 PHP 进程 每次发送邮件后,我在数据库中添加一行以告知已发送邮件。

所以,我不想创建一个进度条来告诉用户 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 件事:第一:当进程进入 updateProgress 函数时第二:当 updateProgress ajax 成功时第三:当 mail_send() ajax 成功时

日志的顺序是:

  • updatePG => 100 次(我已经在我的 php 代码中进行了睡眠测试)
  • 发送完成!!!=> 1次
  • => 收到数据 11 => X 次(我发送了 11 封邮件)

所以对我来说,它告诉我有一个 ajax 调用队列。但是我怎样才能执行我的进度条呢?

编辑: 这可能是一个 php 配置问题,

有人可以告诉我如何允许来自同一进程的多连接?

4

2 回答 2

1

您可能会遇到这样的问题,即 Web 浏览器旨在为任何域运行不超过 2 个并发 Web 请求。您正在尝试使用此功能填充这两个插槽。在不知道有关您正在构建的应用程序的更多信息的情况下,具体来说,这就是我现在所能猜测的全部内容。

我认为,更好的方法是考虑终止您的邮件发送请求的客户端连接,并在客户端终止之后继续该过程。这将为您的浏览器释放一个 http 请求槽,并且应该允许您的 mailProgress ajax 函数继续按写入运行,而不必担心队列等问题。

这是关于忽略客户端终止的另一个 Stack Overflow 问题:PHP 脚本可以在结束 HTTP 请求后继续运行吗?

以及有关如何执行此操作的更多详细信息的博客文章(也链接在上述堆栈溢出问题中):http ://waynepan.com/2007/10/11/how-to-use-ignore_user_abort-to-do -进程带外/

希望有帮助。

于 2012-05-11T12:34:05.650 回答
0

我认为您正在寻找$.done()

于 2012-05-11T10:40:05.347 回答