2012-03-29 81 views
0

在我看来,我有以下几点:如何发送多个元素作为Ajax响应CakePHP中2.0.6

<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

我假设你使用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; 

这将收集所有呈现的内容和echo出来给你的Ajax响应。

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