2013-07-10 39 views
0

基本上,我试图把一个活饲料在我的网站是推动所有新数据到我的数据库外部API,从长轮询PHP中没有数据

下面是当前HTML代码我“M用抢我PHP文件,并得到任何新的内容添加到数据库中

$min_id_result = $DB->select("SELECT `id` FROM `api_media` ORDER BY `id` DESC",true); 
//Basically all this is doing is returning the latest ID in the database 

var Id = "<?=$last_id_result['id'];?>"; 
function waitForPics() { 
    $.ajax({ 
     type: "GET", 
     url: "/ajax.php?id="+Id, 

     async: true, 
     cache: false, 

     success: function(data){ 
      var json = eval('('+ data +')'); 
      var img = json['img']; 
      if(json['img'] != "") { 
       $('<li/>').html('<img src="'+img+'" />').appendTo('#container') 
      } 
      Id = json['id']; 
      setTimeout(waitForPics,1000); 
     }, 
    }); 
} 

$(document).ready(function() { 
    waitForPics(); 
}); 

这里的ajax.php文件我用处理的数据库

$min_id_result = $DB->select("SELECT * FROM `api_media` ORDER BY `id` DESC",true); 
$next_min_id = $min_id_result['id']; 

$last_id = $_GET['id']; 

while($next_min_id <= $last_id) { 
    usleep(10000); 
    clearstatcache(); 
} 

$qry_result = $DB->select("SELECT * FROM `api_media` ORDER BY `id` DESC"); 

$response = array(); 
foreach($qry_result as $image) { 
    $response['img'] = $image['image']; 
    $response['id'] = $image['id']; 
} 
echo json_encode($response); 

我遇到的是它的从请求没有返回数据给我的问题是,它似乎正确的我,但显然第二个开发者的眼睛出现在次

+1

你永远不会更新'while'循环中的任何东西,所以它永远不会给你新的数据。你通常使用'usleep'的while循环来频繁地检查信息,在你所做的只是告诉stat缓存清除。 –

+0

你有没有看过网络流量(萤火虫,谷歌浏览器工具,ngrep,tcpdump ...)天气你得到任何回应? – DanFromGermany

+0

@patrick,这就是我希望它做的,检查两个Ids对方是否相同,然后清除CPU缓存等等。如果它们不是,它会跳出while循环并执行文件的其余部分 – Curtis

回答

0

好这应该工作:

while($next_min_id <= $last_id) { 
    usleep(10000); 
    clearstatcache(); 
    $min_id_result = $DB->select("SELECT * FROM `api_media` ORDER BY `id` DESC",true); 
    $next_min_id = $min_id_result['id']; 
} 

里面的while你等待一个特定的参数改变,但你需要给它一个改变的机会。

这些变量不会自行更改,您需要刷新它们的 。