2014-10-13 5 views
3

Yii 프레임 워크 2.0으로 작업 할 때 컨트롤러 클래스의 함수를 가리키는 AJAX GET jQuery 스크립트가 있습니다.Yii Framework 2.0 AJAX에서 GET 요청인지 확인

$.get('localhost/website/index', {param: 'xxxx'}, function(returnedData){ 
    // some code here..... 
}, 'json'); 

컨트롤러 클래스에는 다음과 같이 AJAX GET 요청을 처리하는 메서드가 있습니다.

public function actionIndex() { 
    $getParam = $_GET['param']; 
    // echo $getParam is: 'xxxx'. 

    // some other code here.... 

    echo json_encode(array()); 
} 

이 AJAX GET jQuery 스크립트를 실행하면 모든 것이 잘 작동합니다. 그러나 웹 브라우저에서 로컬 호스트/웹 사이트/색인을 수동으로 방문하면 다음 오류가 발생합니다.

이 링크를 알고 우연히 또는 의도적으로이 링크를 방문하는 경우 사용자에게이 오류가 표시되는 것을 원하지 않습니다. 사용하는 경우

if($_GET['param']){...} 

여전히 브라우저에 오류 메시지가 표시됩니다. 어떻게 해결할 수 있습니까?

+0

"이 링크를 알고 우연히 또는 의도적으로이 링크를 방문하는 경우 어떤 사용자도이 오류를 보길 원치 않습니다." - 왜? 사용자가 자신의 브라우저로 보내는 내용을 사용자가 보지 못하게 할 수는 없습니다. 원시 데이터가 최종 사용자가 직접 보지 못하게하는 경우, 원시 데이터를 보지 못하게하십시오. 그들은 정말로 원한다면 그것을 볼 수있을 것이며, 당신은 그들을 막으려 고 노력하는 자신의 시간을 낭비 할 것입니다. – Quentin

답변

1

쉬운 방법 :

if (isset($_GET['param'])) { 
    ... 
} 

올바른 방법 :

if (isset($_SERVER['HTTP_X_REQUESTED_WITH'] 
    && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 
) { 
    //... 
} 
+0

이것은 비표준 x-requested-with 헤더를 추가 할 때 (기본적으로 jQuery를 사용하기 때문에 문제가되지 않지만) * security *를 제공하지 않는다는 점에 유의하십시오. RESTful API를 위해 JSON 또는 HTML 문서를 반환할지 결정하는 것 이외에는이 작업을 사용하지 않는 것이 좋습니다. – Quentin

+0

죄송합니다. 귀하의 요지를 이해하지 못합니다. 위의 if 문은 사용자가 위의 링크를 방문하면 웹 브라우저에서 오류 메시지를 숨길 수 있습니다. AJAX GET 요청 때문입니다. –

+0

AJAX 요청 웹 브라우저를 보내면'$ _SERVER [ 'HTTP_X_REQUESTED_WITH'] == 'xmlhttprequest'헤더가 자동으로 추가됩니다. URL로 페이지를 열려고하면 브라우저에서 헤더를 추가하지 마십시오. 그래서'$ _SERVER [ 'HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest ''가'true' 일 경우 - 이것은 AJAX 요청이고'false' 일 경우 - 그렇지 않습니다. – mochalygin

11

당신은 확인할 수 있습니다, 요청이 아약스 요청입니다 :

$request = Yii::$app->request; 
if ($request->isAjax) {...} 

아니면 요청 것을 확인할 수 있습니다 POST 또는 GET 임

if (Yii::$app->request->isPost) {...} 
if (Yii::$app->request->isGet) {...} 

항상 isset()도 사용하십시오! :)

+0

게시물'ajax' 요청과'isPost'를 동시에 사용할 수 있습니까? @AdamFentosi – Stfvns

+0

@Stfvns 테스트를 거치지는 않았지만 아무 문제가 없습니다. XMLHttpRequest는 POST 또는 GET 일 수 있습니다. –