2012-02-07 3 views
0

이 문제는 설명하기가 조금 더 어려울 것입니다. 내 응용 프로그램에 대한 아약스 페이지 매김을 만들었습니다. 나는 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"); 
} 

왜 이런 일이 발생합니까? 다른 정보를 제공해야하는 경우 알려주십시오. 제안, 솔루션 및/또는 디버깅 아이디어를 기쁜 마음으로 듣습니다.

답변

0

이것은 CakePHP 문제와 같지 않습니다. 브라우저가 요청과 함께 보내는 헤더처럼 들립니다.

Fiddler (http://fiddler2.com/fiddler2/)와 같은 요청 검사 도구를 사용하는 것이 좋습니다. 이렇게하면 모든 통화의 헤더와 요청 및 응답을 검사 할 수 있습니다.

관련 문제