Yii: Render Partial and Return to AJAX in JSON format
To return the data to the JS:
public function actionAjaxrequest(){
$carListingView[] = $this->renderPartial("_budgetNewCarsListing", array('newCarListing' => $newCarListing), true);
$carListingView[] = $this->renderPartial("_budgetUsedCarsListing", array('usedCarListing' => $usedCarListing), true);
echo CJSON::encode($carListingView);
}
Two important things. The first is is the third argument to renderPartial()
. As the doc states:
whether the rendering result should be returned instead of being displayed to end users
This means instead of echo'ing out the rendered view, it'll be returned as a string.
The second is the CJSON::encode(), which takes the variable and converts it to a JSON representation, which javascript will be able to handle. CJSON::encode()
's advantages are that it doesn't require any particular version of PHP (json_encode
requires PHP 5.2 or newer), and that it can handle Active Records.
Comments
-
Whatever Kitchen almost 2 years
As per subject above, I have some confusion on the return of the data. So, when I try to return the render partial view data from my controller to AJAX the code will be as follows.
JQuery AJAX:
$.ajax({ url: "<?php echo $this->createUrl('ajaxrequest');?>", type: "POST", data: {affordableCarPrice: ccarprice}, success: function(data){ console.log(data); } });
Yii Controller
public function actionAjaxrequest(){ $carListingView[] = $this->renderPartial("_budgetNewCarsListing", array('newCarListing' => $newCarListing), true); $carListingView[] = $this->renderPartial("_budgetUsedCarsListing", array('usedCarListing' => $usedCarListing), true); var_dump($carListingView); }
The codes inside the controller, I had minimize it and when I log the return data, it gives me the correct one. But, when I use json_encode the array in the controller, and I go back see the return data, it gives me the wrong one.
Despite I set dataType: 'json' and contentType: "application/json; charset=utf-8", in the JQuery ajax. Or header('Content-type: application/json'); in the controller. It still returns the wrong data.
Need help on this very badly, as I couldn't resolve this problem for like almost 2 days. :(
-
Whatever Kitchen almost 12 yearsdude, the results when I got it back in JavaScript is not the results I want :O
-
Raul Pinto almost 11 yearsThank you ernie! I just came accross the same question. Please update your answer to point out the last
true
is essential as one might not see it. It's "hidden" by the horizontal scrollbar