2013-02-12 3 views
0

컨트롤러 Ajax가 있습니다. 그 컨트롤러는 요청의 유효성을 확인하고 아약스가 아닌 경우 오류 메시지를 반환합니다.Kohana : Ajax에서 외부와 같은 내부 요청을 보내는 방법은 무엇입니까?

함수 is_ajax() 헤더 X-Requested-With를 확인하고 true 또는 false를 반환합니다.

저는이 링크를 아약스와 모든 작품에서 사용하고 있습니다.

/아약스/somecontroller/someaction

내가 내부 사용하려고하면 - 아약스하지 요청 - 난 내 자신의 유효성 검사 오류가 있습니다. 내가 필요 heades를 보낼 수 있지만 오류가

$deleted = Request::factory("/ajax/somecontroller/someaction") 
         ->headers("Content-Type", "application/x-www-form-urlencoded") 
         ->headers('HTTP_X_REQUESTED_WITH', 'XmlHttpRequest') 
         ->headers('X-Requested-With', 'XmlHttpRequest')        
         ->method(Request::POST) 
         ->post(array(
          "id_zone_comp" => $id_zone_comp 
         )) 
         ->execute()->body(); 

:

내 코드가있다.

외부 요청과 같은 내부 요청을 보내는 방법은 무엇입니까?

코 하나 3.2. 나는 그런 아약스로 내부 쿼리를 처리 할 수 ​​물론


은 그들에게 is_internal 후 액세스()을 제공하지만,이 응답하지 않습니다.

답변

1

문제는 실제로 내부 요청이라는 사실과 관련이 있습니다. 당신이 보내는 헤더가 $_SERVER 환경 정보 배열에 채워져 있지 않기 때문에. 대신 $this->request->headers() 안에 보관됩니다.

는 아약스 검사는 다음과 같이 $를 기반으로 _SERVER 컨텐츠로 수행됩니다

if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) 
{ 
    // Typically used to denote AJAX requests 
    $requested_with = $_SERVER['HTTP_X_REQUESTED_WITH']; 
} 

이 요청을 외부 일을하는 것입니다 is_internal() 검사가 포함되어 있지 것이며, 할 수있는 유일한 솔루션을 당신 ' 프로토콜 (http://)과 전체 도메인 이름 (기본적으로 전체 주소)을 포함하도록 요청 URL을 설정해야합니다. 그런 다음 요청에 $ _SERVER 배열에 새 헤더가 채워지고 is_ajax()을 통해 전달해야합니다.

+0

나는 그것이 어떻게 작동하는지 안다. 예. 'http : //'를 추가하면 도움이됩니다. 감사. –

관련 문제