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