이 문제는 설명하기가 조금 더 어려울 것입니다. 내 응용 프로그램에 대한 아약스 페이지 매김을 만들었습니다. 나는 RequestHandler를 구성 요소를 포함했다isAjax param이 CakePHP의 페이지 매김을 위해 설정되지 않았습니다.
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);
}
: 여기 컨트롤러의 기능 방법에 대한 핵심 코드 (일부 코드가 분명히 변경 또는 개인 정보 보호 문제에 대해 표시되지 않습니다)입니다. 이 코드는 주로 작동합니다. 문제는 AJAX 요청이 두 번째 페이지 이후에 CakePHP (1.3 버전)에 의해 설정되지 않는다는 것입니다. 결과적으로 세 번째 페이지는 두 번째 페이지 (중복)와 같은 페이지입니다. 이는 $ 페이지가 다시 1로 설정되기 때문에 발생합니다. 이상한 점은 다음 페이지가 제대로로드된다는 것입니다. HTTP 요청을 조사한 결과, AJAX 요청과 비 AJAX 요청간에 명확한 차이가 있으며 두 번째 페이지로드 문제 요청은 항상 비 AJAX 요청입니다. 이 코드도 두 번째 페이지에서 false를 반환합니다.
function isAjax() {
return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']=="XMLHttpRequest");
}
왜 이런 일이 발생합니까? 다른 정보를 제공해야하는 경우 알려주십시오. 제안, 솔루션 및/또는 디버깅 아이디어를 기쁜 마음으로 듣습니다.