2012-03-29 83 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處理髮送標題和內容。