2015-01-05 8 views
-1

하위 도메인에서 AJAX GET 요청을 주 도메인으로 보내려고합니다. 아래는 나의 AJAX 코드이다.Yii Framework 2.0에서 하위 도메인에서 주 도메인으로 요청 받기

$.get('http://my-yii2-website.com/controller/test-method', 
     {data: '1')}, 
     function(returnedData){ 

     alert(returnedData); 

     }, 
     'json' 
); 

위의 코드는 하위 도메인에 있습니다. 메인 도메인에는 다음과 같은 컨트롤러와 액션 메소드가 있습니다.

public function behaviors() 
{ 
    $subDomain = 'http://subdomain.my-yii2-website.com'; 

    return [ 
     'corsFilter' => [ 
      'class' => \yii\filters\Cors::className(), 
      'cors' => [ 
       'Origin' => [$subDomain, ], 
       'Access-Control-Request-Method' => ['GET', ], 
       'Access-Control-Request-Headers' => ['*'], 
       'Access-Control-Allow-Credentials' => null, 
       'Access-Control-Max-Age' => 3600, 
      ], 
     ], 
    ]; 
} 

public function actionTestMethod() 
{ 
    $request = Yii::$app->request; 
    if($request->isAjax) 
    { 
      return json_encode('OK!'); 
    } 
    else 
    { 
      return json_encode('ERROR'); 
    } 
} 

작동하지 않습니다. 그러나 actionTestMethod()의 if 문으로 인해 요청을 AJAX 요청으로 보지 못합니다. 그것은 미리 정의 된 'ERROR'메시지를 반환합니다. 나는 Yii 프레임 워크 2.0으로 일하고있다.

+0

입니다 다른 http : // my-yii2-website/controller/action 방법 및 http://subdomain.my-yii2-website.nl. 아약스 URL에서 .nl을 놓친 것일 수도 있습니다. – Panoptik

+0

그냥 내 질문을 편집했습니다. 내 원래 코드에서 도메인 URL과 하위 도메인 URL이 올바른지 확인했습니다. POST 메서드를 올바르게 정의하는 동안 왜 이것이 잘못된 요청인지 이해하지 못합니다. –

+0

다음 : cors 분기의 actions 배열이 잘못된 수준에 있습니다. cors와 actions 브랜치는 형제 여야합니다 – Panoptik

답변

0

isAjax은 Ajax 요청을하는 사람이 (비표준) 헤더를 설정할 것이라는 가정하에 X-Requested-With 헤더 존재 여부를 테스트합니다.

jQuery는 기본적으로 동일한 출발지 요청에 대해이를 설정합니다. 교차 원점 요청에 대해서는 설정하지 않습니다 (비표준이므로 일반 CORS 설정에서는 거부합니다).

명시 적으로 설정하거나 다른 방법을 사용하여 요청이 ajax인지 아닌지 확인하십시오.

는 (나쁜 시험은 "아약스는"일반적으로 그주의 "HTML 대신 JSON을 부탁합니다"일반적으로 더 나은 테스트이고 당신은 the Accept header을 그를 입력 할 수 있습니다) 도메인이 예에서

+0

그러면 AJAX 요청인지 또는 Yii 2.0 방법을 사용하지 않는지 어떻게 확인할 수 있습니까? 그렇지 않으면 AJAX 요청이 아닌 경우 응용 프로그램이 실행을 멈추기를 원하기 때문입니다. –

+0

@OConnor - 내가 말했듯이, X-Requested-With 헤더를 명시 적으로 설정하십시오. – Quentin

관련 문제