2012-07-26 2 views
2

위 주제에 따라 데이터 반환에 다소 혼란이 있습니다. 그래서, 컨트롤러에서 AJAX로 렌더링 부분 뷰 데이터를 반환하려고하면 코드는 다음과 같이됩니다.Yii : 부분 렌더링 및 JSON 형식의 AJAX로 돌아 가기

JQuery와 AJAX :

$.ajax({ 
     url: "<?php echo $this->createUrl('ajaxrequest');?>", 
     type: "POST", 
     data: {affordableCarPrice: ccarprice},       
     success: function(data){ 
      console.log(data); 
     } 
}); 

YII 컨트롤러

public function actionAjaxrequest(){    

     $carListingView[] = $this->renderPartial("_budgetNewCarsListing", array('newCarListing' => $newCarListing), true); 
     $carListingView[] = $this->renderPartial("_budgetUsedCarsListing", array('usedCarListing' => $usedCarListing), true); 

     var_dump($carListingView); 
} 

컨트롤러 내부의 코드는, 나는 그것을 최소화했고 내가 반환 데이터를 기록 할 때, 그것은 나에게 올바른을 제공합니다. 하지만 컨트롤러에서 json_encode 배열을 사용할 때 리턴 데이터를 다시 보았을 때 잘못된 결과가 나옵니다.

나는 dataType : 'json'과 contentType : "application/json; charset = utf-8"을 JQuery ajax에서 설정 했음에도 불구하고. 또는 헤더 ('Content-type : application/json'); 컨트롤러에서. 여전히 잘못된 데이터를 반환합니다.

거의 2 일 동안이 문제를 해결할 수 없어이 문제에 대한 도움이 필요합니다. :(

+0

브라우저에서 '뒤로'버튼을 통해 돌아갈 수 있습니까? – elo

+0

AJAX 콜백입니다. 뷰를 렌더링하는 HTML 코드를 반환하고 JSON으로 인코딩하고 AJAX 콜백 데이터로 전달할 수 있도록 배열에 보관하는 것이 좋습니다. –

답변

7

는 JS로 데이터를 반환 :

public function actionAjaxrequest(){    
    $carListingView[] = $this->renderPartial("_budgetNewCarsListing", array('newCarListing' => $newCarListing), true); 
    $carListingView[] = $this->renderPartial("_budgetUsedCarsListing", array('usedCarListing' => $usedCarListing), true); 

    echo CJSON::encode($carListingView); 
} 

중요한 두 가지를 먼저 인 renderPartial() 세 번째 인자 인 doc states 같이..

여부 묘화 결과 정상적으로 이 최종 사용자에게 표시됩니다.

렌더링 된 뷰를 반향 출력하면 문자열로 반환됩니다.

두 번째 변수는 CJSON::encode()입니다.이 변수는 변수를 가져 와서 JavaScript가 처리 할 수있는 JSON 표현으로 변환합니다. CJSON::encode()의 장점은 PHP의 특정 버전 (json_encode에는 PHP 5.2 이상 필요)이 필요하지 않으며 활성 레코드를 처리 할 수 ​​있다는 것입니다.

+0

젠장, 내가 JavaScript로 돌아 왔을 때의 결과는 내가 원하는 결과가 아님 : O –

+1

어니 고마워! 나는 방금 같은 질문을했다. 마지막 '사실'이 보이지 않을 수도 있으므로 답변을 업데이트하십시오. 수평 스크롤 바에 의해 "숨겨진"상태입니다. –