2013-10-29 152 views
-1

讓我們說我有一個虛擬的服務器端代碼(ajax_response.php),它看起來是這樣的:jquery ajax - 有什麼辦法可以得到部分響應嗎?

<?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的反應,但問題是,成功的功能(即第一個函數內。然後)只會在ajax_response.php完成執行時(這需要10秒)時被調用。

我想知道我是否可以提高效率。即。只要在php文件中調用echo,我就會立即得到客戶端的響應。

如果您可以包含一些示例代碼,這將是非常好的。

+0

不,你不能! Websockets或彗星似乎更多你在找什麼? – adeneo

+0

或http://stackoverflow.com/questions/333664/simple-long-polling-example-code – mplungjan

+0

你想要一個像Ajax進度條的東西嗎?一個簡單的(但有點骯髒的)解決方案是讓php寫入一個文件,並通過ajax(和一個不同的php腳本)輪詢該文件,間隔爲 – x4rf41

回答

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

`

相關問題