3

状況:ユーザーはAJAXを介して多数の写真をアップロードし、PHPスクリプトがバックグラウンドで実行され続け、アップロードされた写真に基づいてさまざまなサムネイルを生成している間、Webサイトとの対話を続けます。

サイト構成:

  1. jQuery AJAX(v1.9.1)
  2. PHP 5.4.7、FastCGIモード
  3. IIS 7.5、gzip付き

私が参照して実装しようとした以前の投稿(しかし役に立たなかった):

以前の投稿に基づいて膨大な数のスクリプトオプションを試しましたが、PHPが処理を続行している間、ユーザーに続行させるようにAJAXスクリプトに指示するものはないようです...

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.
        }
    });

応答ヘッダーは問題ないようです...

Firebugによって検出されたPOST応答ヘッダー

質問:PHPスクリプトがサムネイルを生成し続けている間に、PHPスクリプトの途中からコードを受け取った後、ユーザーが続行できるようにAJAXを取得するにはどうすればよいですか?

4

1 に答える 1

1

requestを実行すると、PHPスクリプトの実行が完了するまで常に待機するか、タイムアウトが発生します。したがって、AJAXを途中で停止して、PHPを実行し続けることはできません。ファイルをアップロードしてからサムネイルを作成したいが、ファイルがアップロードされたという情報がある場合は、次の2つの手順で実行します。

  1. AJAXでファイルをアップロード->成功を返す
  2. 成功したときに別のAJAXリクエストを実行して、アップロードされた画像(または実際には親指)を取得します。

そのおかげで、親指は後で最初に要求されたときにレンダリングすることもできます(ajaxがなくても)。親指をリクエストして待機したくない場合は、サーバーでcronジョブを使用して、画像を待機するための親指を作成します。

于 2013-03-11T11:24:00.877 に答える