显示有关发送多封电子邮件的Jquery ajax调用的进度

时间:2016-01-30 09:49:47

标签: php jquery ajax email crm

我正在使用ajax向我的所有客户发送一封电子邮件(圣诞节前的例子)。 这是ajax脚本

            $(function () {
              $("#mktg_submit").on("click",function( event ) {
                event.preventDefault();
                console.log($("#mktg").serialize());
                $("#mktg_esito").empty();
                $("#mktg_esito").append("<img src='images/loading.gif' alt=loading title=loading />");
                $.ajax({
                    type        : 'POST',
                    url         : 'json/mktg.php',
                    data        : $("#mktg").serialize(),
                    dataType    : 'json',
                    encode      : true
                })
                .done(function(data) {
                    $( "#mktg_esito" ).empty();
                    console.log(data);
                    if ((data)["success"]===false) {
                        $( "#mktg_esito" ).append("<div class='alert alert-danger'>"+(data)["errors"]+"</div>");
                    } else {
                        $("#mktg_esito").append("<div class='alert alert-success' id='mktg_mess'><strong>Ben fatto!</strong> Email inviate correttamente.</div>");
                        $.each((data)["email"], function( i, val ) {
                            $( "#mktg_esito" ).append("<p>Email inviata a: <b>"+val+"</b></p>");
                        });
                    }
                    $("#mktg_mess").show().delay(1000).fadeOut();
                });
            });
          });

这个我只在脚本启动时才看到加载图像,只有在完成所有内容后才会看到结果。当我发送1.000电子邮件时,我看不到工作的进度,有人可以帮我用最好的方式来查看发送的进度吗?

1 个答案:

答案 0 :(得分:0)

使用xhr对象并将事件侦听器附加到progress事件。 See the reference

在你的html中添加div进度

<div class="progress"></div>
<style>
    .progress {
        width: 0;
        height: 4px;
        background: black;
        transition: width .3s linear;
    }
</style>

然后用以下内容更改你的ajax请求:

$.ajax({
    xhr: function () {
        var xhr = new window.XMLHttpRequest();
        xhr.upload.addEventListener("progress", function (evt) {
            if (evt.lengthComputable) {
                var percentComplete = evt.loaded / evt.total;
                console.log(percentComplete);
                $('.progress').css({
                    width: percentComplete * 100 + '%'
                });
                if (percentComplete === 1) {
                    $('.progress').fadeOut();
                }
            }
        }, false);
        xhr.addEventListener("progress", function (evt) {
            if (evt.lengthComputable) {
                var percentComplete = evt.loaded / evt.total;
                console.log(percentComplete);
                $('.progress').css({
                    width: percentComplete * 100 + '%'
                });
            }
        }, false);
        return xhr;
    },
    type: 'POST',
    url: "your-url",
    data: data,
    success: function (data) {}
});