我在网站上有一个页面,您可以在其中下载以前付费的文件。该文件是一个 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 上的其他浏览器上都没有启动轮询。有人知道可能是什么问题吗?