-1

次のようなダミーのサーバー側コード (ajax_response.php) があるとします。

<?php

for ($i = 1; $i <= 10; $i++) {
    echo $i;
    sleep(1);
}

?>

つまり、10 秒後に「12345678910」がエコーされます。

次のjqueryコードもあります。

$.ajax({
        type: 'POST',
        url: 'ajax_response.php'
    }).then(function(results) { 
        //... success

    }, function {
        //... execute if error occurs
} );

上記の ajax を使用して ajax_response.php からの応答を取得できますが、問題は、成功関数 (つまり、.then 内の最初の関数) が呼び出されるのは、ajax_response.php の実行が終了したときだけです (10 秒かかります)。

これをより効率的にすることができるかどうか知りたいです。すなわち。php ファイルで echo が呼び出されるとすぐに、クライアント側からすぐに応答を取得します。

サンプルコードを含めていただけると助かります。

4

1 に答える 1

0

JavaScript側で

   var interval;
   $.ajax({
        beforeSend: function(){
            interval = setInterval(function(){
                    $.get("http://example.com/pr.txt").done(function(progress){
                        console.log(progress)
                    })
                },10);
        },
        type: "POST",
        url: "http://example.com/req.php",
        data: reqdata,
        cache: false,
        success: function(html) {
            clearInterval(interval);
            var values = html.split('[mydata]');
            var mydata = values[1];
        }
   });

`

PHP側

unlink("progress.txt");
while ($i <= 20) {
    writeToFile(progress, "Mail sent to $i <br>");
    sleep(4);
    $i++;
}
$final = array('status'=>'ok', 'numbers'=>$success_numbers);
echo json_encode($final);

`

于 2018-03-05T19:36:56.323 に答える