AJAX:检测连接已关闭,PHP继续

时间:2013-03-11 11:12:25

标签: php jquery iis-7.5

情境:用户通过AJAX上传大量照片,然后继续与网站互动,同时PHP脚本继续在后台运行,并根据上传的照片生成各种缩略图。

网站配置:

  1. jQuery AJAX(v1.9.1)
  2. PHP 5.4.7,FastCGI模式
  3. IIS 7.5,使用gzip
  4. 我之前提到并试图实施的帖子(但无济于事):

    我已经根据以前的帖子尝试了大量的脚本选项,但似乎没有人告诉AJAX脚本让用户继续,而PHP继续处理......

    示例PHP代码:

    <?php
       // Save images to db, etc
    
       // Now tell AJAX to let the user continue, before generating thumbnails
       if(ini_get('zlib.output_compression')) { 
           ini_set('zlib.output_compression', 'Off'); // turn IIS gzip for this file
       }
       ob_end_clean();
       header("Connection: close");
       header("Content-Encoding: none"); //ensures gzip is not sent through
       ob_start();
          echo '123'; // 3 digit number will be sent back to AJAX
       $size = ob_get_length(); // should mean Content-Length = 3
       header("Content-Length: $size");
       ob_end_flush(); 
       flush(); 
       ob_end_clean();
    
       // Generate thumbnails, etc
    ?>
    

    jQuery AJAX代码示例:

    $.ajax({
            type: 'POST',
            url: ajax_url,
            data: { foo: bar },
            beforeSend:function(){
                // 
            },
            success:function(data){
                alert(data); // Only seems to be firing once the thumbnails have been generated.
            }
        });
    

    响应标题似乎没问题......

    POST response headers as detected by Firebug

    问题:当PHP脚本继续生成缩略图时,如何让AJAX允许用户继续从PHP脚本中间接收代码?

1 个答案:

答案 0 :(得分:1)

如果您运行请求,它将一直等到PHP脚本完成执行,否则将会超时。所以你不能在中间停止AJAX,并保持PHP运行。如果您想上传文件,然后创建缩略图,但有上传文件的信息,请分两步完成:

  1. 使用AJAX上传文件 - &gt;回归成功
  2. 成功运行另一个AJAX请求以获取上传的图像(或实际上是拇指)。
  3. 由于这一点,拇指也可以在以后第一次请求时呈现(即使没有ajax)。如果您不想请求并等待拇指,请在服务器上使用cron job,这将创建等待图像的拇指。