Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 发送其他请求时的Ajax轮询在safari上不起作用_Php_Jquery_Download_Safari_Ajax Polling - Fatal编程技术网

Php 发送其他请求时的Ajax轮询在safari上不起作用

Php 发送其他请求时的Ajax轮询在safari上不起作用,php,jquery,download,safari,ajax-polling,Php,Jquery,Download,Safari,Ajax Polling,我在一个网站上有一个页面,在那里你可以下载你以前付费购买的文件。该文件是包含许多pdf文件的zip存档。 单击下载链接时,会调用一个php文件,该文件在提供文件之前会执行一些工作(在pdf上添加戳记)。 因为在较大的文件上这可能需要一些时间,所以我将构建一个轮询机制,向用户显示正在发生的事情。 轮询是通过如下所示的ajax调用完成的: $('.rm-table').on(clickhandler,'.fa-download', function(e){ tr = $(this).clo

我在一个网站上有一个页面,在那里你可以下载你以前付费购买的文件。该文件是包含许多pdf文件的zip存档。 单击下载链接时,会调用一个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上的其他浏览器上,都无法启动轮询。有人知道问题出在哪里吗?

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

这一行中的clickhandler是什么
$('.rm table')。在(clickhandler,.fa download',函数(e){
?var clickhandler=('ontouchstart'在document.documentElement?“touchstart”中):“单击”);为了检测点击或触摸,您是否尝试了
XMLHttpRequest
中提供的
onprogress
事件?我没有,但似乎需要调用zip文件来通过javascript。我更希望调用文件本身不需要javascript。因此我希望有另一种解决方案。我不过我会看看的。