【发布时间】:2012-02-29 06:36:37
【问题描述】:
这个问题会有点难以解释,所以请耐心等待。我为我的应用程序创建了 ajax 分页。以下是它在控制器中如何运行的核心代码(出于隐私考虑,某些代码显然已更改或未显示):
function action(){
//PROBLEM LIES HERE
if ($this->params['isAjax']){
$page = $_COOKIE['page'];
} else {
$page = 1;
}
//END PROBLEM AREA
$offset = ($page - 1) * $this->perPage;
$limit = $this->perPage + 1; //+1 so we can test if there are more after
setcookie('page', ++$page, 0, '/');
$objects = $this->getObjects($query, $limit, $offset);
$moreObjects = count($objects) > $this->perPage;
$objects = array_slice($objects, 0, $this->perPage);
$this->set('objects', $objects);
if ($this->params['isAjax']){
$this->set('type', 'objects');
$rendered = $this->render('/elements/ajax_elements', null);
echo json_encode(array('objects' => $rendered, 'moreObjects' => $moreObjects));
$this->_stop();
}
$this->set('moreObjects', $moreObjects);
}
我已经包含了 RequestHandler 组件。这段代码最有效,问题是在第二页之后 CakePHP (v 1.3) 没有设置 AJAX 请求。因此,第三页与第二页是同一页(重复),这是因为 $page 再次设置为 1。同样奇怪的是,以下页面加载正常。我检查了 HTTP 请求,AJAX 请求和非 AJAX 请求之间有明显的区别,第二个页面加载问题请求通常是非 AJAX 请求。甚至此代码在第二页上也返回 false:
function isAjax() {
return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']=="XMLHttpRequest");
}
为什么会这样?如果您需要我提供任何其他信息,请告诉我。我很高兴听到任何建议、解决方案和/或调试想法。
【问题讨论】:
标签: ajax cakephp pagination cakephp-1.3