0

我在网站上有一个页面,您可以在其中下载以前付费的文件。该文件是一个 zip 存档,其中包含许多 pdf 文件。单击下载链接时,会调用一个 php 文件,该文件会在提供文件之前执行一些工作(在 pdf 上添加标记)。因为这在较大的文件上可能需要一些时间,所以我构建了一个轮询机制来向用户展示正在发生的事情。轮询是通过如下所示的 ajax 调用完成的:

$('.rm-table').on(clickhandler,'.fa-download', function(e){

    tr = $(this).closest('tr');
    id = tr.attr('id');
    tr.find("progress").show();
    tr.find('.downloadstatus').show();
    tr.find('.downloadstatus').html('Start Download...');
    setTimeout(getDownloadStatus(), 250);
});

function getDownloadStatus(){
    setTimeout( function() {
        $.ajax({
        url: '/process/{{Auth::id()}}/'+id,
        type: 'POST',
        async: true,
        cache: false,
        data: {},
        dataType: "json",
        success: function(data, textStatus, jqXHR)
        {
                var tekst = data.tekst;
                var perc = data.percentage;

                 tr.find('.downloadstatus').html(tekst);
                 tr.find('progress').val(perc);

                 if(tekst != 'done'){
                    getDownloadStatus();
                 } else {
                    tr.find('.downloadstatus').html("Done!");
                    tr.find('progress').val(100);
                            setTimeout(
                              function() 
                              {
                                tr.find('progress').val(0);
                                tr.find('progress').hide();
                                tr.find('.downloadstatus').html("");
                                tr.find('.downloadstatus').hide();
                              }, 750);

                 }
        },
        error: function(jqXHR, textStatus, errorThrown) {

                var response = jQuery.parseJSON(jqXHR.responseText);
                    alert(response.error);
        }
        });
      }, 250);         
}

轮询在用户单击链接后完成。因此不会阻止链接的默认行为。

这在 Windows 上的所有浏览器上都可以正常工作,但在 Mac 上的 Safari 甚至 ipad 上的其他浏览器上都没有启动轮询。有人知道可能是什么问题吗?

4

1 回答 1

0

好的,所以问题是 Safari 与 Windows 上的浏览​​器不同,单击链接时似乎停止了页面上的所有 javascript 活动。因此,当“其他页面”仍在加载时,无论是重定向还是下载,ajax 轮询都是不可能的。我也通过 ajax 请求文件来解决它。如果 JavaScript 不可用,仍然允许后备,如果可能的话。

于 2017-06-30T10:36:22.657 回答