这个问题会更难解释,所以请耐心听我说。我已经为我的应用程序创建了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 (v1.3)没有设置AJAX请求。因此,第三个页面与第二个页面是同一页面(重复),这是因为$page再次设置为1。同样奇怪的是,下面的页面加载正常。我已经检查了HTTP请求,AJAX请求和非AJAX请求之间有明显的区别,第二个页面加载问题请求通常都是非AJAX请求。即使这段代码在第二个页面上也会返回false:
function isAjax() {
return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']=="XMLHttpRequest");
} 为什么会发生这种情况?如果您需要我提供任何其他信息,请让我知道。我很高兴听到任何建议,解决方案和/或调试想法。
发布于 2012-02-08 05:24:36
这听起来不像是CakePHP问题,它听起来像是您的浏览器随请求一起发送的头部。
我推荐使用请求检测工具,比如Fiddler (http://fiddler2.com/fiddler2/)。这将允许您检查所有调用的标头、请求和响应。
https://stackoverflow.com/questions/9182939
复制相似问题