Как отправить несколько элементов как ответ Ajax в CakePHP 2.0.6 - PullRequest
0 голосов
/ 29 марта 2012

На мой взгляд, у меня есть следующее:

<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 для первого элемента.Как я могу отправить все HTML из других элементов, отображаемых внутри foreach?

Спасибо.

1 Ответ

0 голосов
/ 29 марта 2012

Я предполагаю, что вы используете 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 обрабатывать отправку заголовков и содержимого.

...