Yii: Render Partial and Return to AJAX in JSON format

12,231

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.

Share:
12,231
Whatever Kitchen
Author by

Whatever Kitchen

Me is me... you is you?

Updated on June 05, 2022

Comments

  • Whatever Kitchen
    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
    Whatever Kitchen almost 12 years
    dude, the results when I got it back in JavaScript is not the results I want :O
  • Raul Pinto
    Raul Pinto almost 11 years
    Thank 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