2012-07-26 34 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數組時,我回去查看返回的數據,但它給了我一個錯誤的數據。

儘管我在jQuery ajax中設置了dataType:'json'和contentType:「application/json; charset = utf-8」。或者標題('Content-type:application/json');在控制器中。它仍然返回錯誤的數據。

對此非常需要幫助,因爲我近2天無法解決此問題。 :(

+0

您通過瀏覽器上的「返回」按鈕返回? – elo 2012-07-26 16:45:29

+0

這是一個AJAX回調花花公子,它假設返回呈現視圖的HTML代碼並將它們保存在一個數組中,以便將它們編碼爲JSON並傳遞迴AJAX回調數據。 – 2012-07-26 16:49:09

回答

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(),它接受變量並將其轉換爲JSON表示形式,JavaScript將能夠處理這些表示形式。 CJSON::encode()的優點是它不需要任何特定版本的PHP(json_encode需要PHP 5.2或更新版本),並且它可以處理活動記錄。

+0

老兄,當我在JavaScript中找回它的結果並不是我想要的結果:O – 2012-07-27 14:28:14

+1

謝謝ernie!我剛剛遇到同樣的問題。請更新你的答案,指出最後的'真'是必不可少的,因爲人們可能看不到它。它被水平滾動條「隱藏」 – 2013-07-03 09:34:51