如何在CakePHP 2.0.6中将多个元素作为ajax响应发送

时间:2012-03-29 14:23:59

标签: jquery ajax cakephp element

在我看来,我有以下内容:

<script type="text/javascript">
    $(function() {
        $('.go_button').click(function(e){
            e.preventDefault();
            $.ajax({
                type: "POST",
                url: "/Controller/find_by_location",
                data: "city=New%York",
                dataType: 'html',
                success: function(data) {
                    $('#coupons_results').html(data);
                }
            });
        });
    });
</script>

在我的控制器中:

public function find_by_location(){
        $this->autoRender = false;
        $this->TblLocalDeal->recursive = 3;
        $city = "New york";   //just for test
        $zipcode = "";        //testing
        $conditions = array(...);
        $result = $this->paginate('Table', $conditions);
        $this->layout = null;
        foreach($results as $result):
            $this->set('var', $result['index']);
            $this->render('/elements/local_coupon');
        endforeach;
    }

这只是为第一个元素发送html。如何从foreach中呈现的其他元素发送所有html?

感谢。

1 个答案:

答案 0 :(得分:0)

我假设你正在使用Cake 2.x。

$this->render()返回一个响应对象,直到你告诉它才输出响应。要获得响应,请在循环中尝试这样的事情:

$out = '';
foreach($results as $result):
   $this->set('var', $result['index']);
   $response = $this->render('/elements/local_coupon');
   $out .= $response->body();
endforeach;
echo $out;

这将收集所有呈现的内容并将其回显给您的ajax响应。

注意:这不会发送标题,因此您应该手动执行此操作。我建议您不要使用这种方法,而是为find_by_location()创建一个视图并回显那里的元素,让Cake处理发送标题和内容。