2013-10-29 115 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); 

`

相关问题