我正在运行一个longpolling脚本来从数据库中获取数据。在将我的脚本移动到MVC之前,它工作正常。
我查看了chrome开发人员工具并且它没有显示任何内容,但页面只是继续加载,当我去刷新它不会加载时,我必须关闭我的xampp服务器或关闭我的浏览器。 ..这是我的剧本:
class SystemController extends Controller
{
public function lastbid()
{
set_time_limit(0);
// main loop
while (true) {
//get the product info
$getbidresult = ProductModel::bidprice(Request::get('item'));
// if ajax request has send a timestamp, then $last_ajax_call = timestamp, else $last_ajax_call = null
$last_ajax_call = Request::get('timestamp');
// get timestamp of when file has been changed the last time
$lastbid = isset($getbidresult->timestamp) ? $getbidresult->timestamp : 0;
// if no timestamp delivered via ajax or data.txt has been changed SINCE last ajax timestamp
if ($last_ajax_call == null || $lastbid > $last_ajax_call) {
// put last bid info into an array
$result = array(
'bidamount' => isset($getbidresult->amount) ? System::escape($getbidresult->amount): 0,
'timestamp' => System::escape($lastbid)
);
// encode to JSON, render the result (for AJAX)
$json = json_encode($result);
echo $json;
// leave this loop step
break;
} else {
// wait for 1 sec (not very sexy as this blocks the PHP/Apache process, but that's how it goes)
sleep(10);
continue;
}
}
}
}
这就是我用JS抓取数据的方式。
function getContent(timestamp)
{
var queryString = {
'timestamp': timestamp
};
$.ajax(
{
type: 'GET',
url: '<?php echo Config::get('URL'); ?>system/lastbid?item=<?php echo System::escape($recentitem->id); ?>',
data: queryString,
success: function(data)
{
var obj = jQuery.parseJSON(data);
$('#bidprice-<?php echo System::escape($recentitem->id); ?>').html(obj.bidamount);
getContent(obj.timestamp);
}
});
}
$(function()
{
getContent();
});
$(document).ready(function() {
});
除非我在错误的地方看,否则我已经查看了apache日志,但没有用。代码中的任何内容看起来都不合适,这不是我所知,但我可能会忽视某些内容。
我在foreach中有脚本,所以我可以为每个产品启动div。
编辑,查看apache和mysql日志,它什么也没显示。这可能是内存泄漏吗?
答案 0 :(得分:0)
我想我已经在外部网站的帮助下解决了这个问题。这与睡眠()
有关我已经使用以下方法修复了它:
session_write_close();
在报告之前,我会做更多测试,看看它是如何阻止的。之所以等等。