【问题标题】:Yii: Render Partial and Return to AJAX in JSON formatYii:以 JSON 格式渲染部分并返回到 AJAX
【发布时间】:2012-07-26 16:41:58
【问题描述】:

根据上述主题,我对数据的返回有些困惑。因此,当我尝试将渲染部分视图数据从我的控制器返回到 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"。或 header('Content-type: application/json');在控制器中。它仍然返回错误的数据。

非常需要帮助,因为我几乎 2 天都无法解决这个问题。 :(

【问题讨论】:

  • 你通过浏览器上的“返回”按钮返回?
  • 这是一个 AJAX 回调花花公子,它假设返回呈现视图的 HTML 代码并将它们保存在一个数组中,以便我将它们编码为 JSON 并传递回 AJAX 回调数据。

标签: jquery ajax yii renderpartial


【解决方案1】:

将数据返回给 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 Record。

【讨论】:

  • 老兄,当我用 JavaScript 找回它时的结果不是我想要的结果:O
  • 谢谢厄尼!我刚遇到同样的问题。请更新您的答案以指出最后一个true 是必不可少的,因为您可能看不到它。它被水平滚动条“隐藏”
猜你喜欢
  • 1970-01-01
  • 2013-10-15
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 2012-01-17
  • 1970-01-01
相关资源
最近更新 更多