Yii:呈现部分并以JSON格式返回AJAX

时间:2012-07-26 16:41:58

标签: jquery ajax yii renderpartial

根据上述主题,我对数据的返回感到困惑。因此,当我尝试将渲染局部视图数据从我的控制器返回到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天就解决了这个问题。 :(

1 个答案:

答案 0 :(得分: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或更新版本),并且它可以处理Active Records。