在我看来,我有以下内容:
<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?
感谢。
答案 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处理发送标题和内容。