2013-01-18 26 views
5

Tôi đang xây dựng một ứng dụng trong CakePHP và tôi có một cửa sổ hộp thoại jquery và mỗi khi người dùng mở nó, tôi muốn thực hiện một yêu cầu jquery sẽ điền nội dung với kết quả của yêu cầu. Tôi có một file js đó là trong thư mục webroot/js, với kịch bản sau đây:CakePHP: Rendering view sau ajax

$.ajax({      
    url:'/projects/getAssets', 
    type:"POST",           
    data:assetData, 
    //dataType:'text', 
    update: '#assetManagerContent' 
}); 

Trong tập tin điều khiển của tôi (ProjectsController) Tôi có chức năng sau:

function getAssets($id = null) { 
    // Fill select form field after Ajax request. 
    if(!empty($this->data)){ 
     $this->set('assetsFilter', 
     $this->Project->Asset->find('list', 
      array(
       'conditions' => array(
        'Asset.project_id' => '23' 
       ) 
      ) 
     ) 
    ); 
    $this->render('elements/assets', 'ajax'); 
    } 
} 

Và cuối cùng tôi có chế độ xem (phần tử/nội dung):

<?php $assetsFilter = $this->requestAction('projects/getAssets'); ?> 
    <?php foreach($assetsFilter as $assetFilter): ?> 
    <div class="assetManager-asset"> 
     <div class="thumb"></div> 
     <div class="label-name"><?php echo $assetFilter['AssetType']['type'] ?></div> 
     <div class="label-date"><?php echo $assetFilter['Asset']['layer'] ?></div> 
     <?php //echo $assetFilter['Asset']['id'] ?> 
    </div> 
    <?php endforeach; ?> 

Khi người dùng mở hộp thoại, yêu cầu ajax được kích hoạt nhưng dường như không có gì xảy ra trong #assetManagerContent div.

Tôi hy vọng ai đó có thể cho tôi biết những gì tôi đang làm sai

+0

Tìm thấy một bài tương tự tại http://stackoverflow.com/questions/11240639/cakephp-ajax-render –

+0

Tìm thấy bài tương tự trên http://stackoverflow.com/questions/11240639/cakephp -ajax-render –

Trả lời

4

Theo như tôi biết, không có update tùy chọn trong jQuery ajax api. Thay vào đó, bạn nên thêm callback thành công và cư các dữ liệu đó:

$.ajax({      
    url:'/projects/getAssets', 
    type:"POST",           
    data:assetData, 
    //dataType:'text', 
    success: function(data) { 
     $('#assetManagerContent').html(data); 
    } 
}); 
+0

tôi đã sử dụng chức năng thành công và cuộc gọi ajax của tôi là một thành công. tôi nhận được dữ liệu cập nhật của mình. tuy nhiên, đó là điều duy nhất được nhìn thấy trên quan điểm của tôi. tất cả mọi thứ khác trên quan điểm disapeared – gkalikapersaud

+0

Có vẻ như bạn chỉ thay thế mọi thứ dựa trên bộ chọn của bạn. Trong ví dụ trên, thay thế '# assetsManagerContent' bằng công cụ chọn thành nội dung chế độ xem của bạn (không phải tất cả nội dung). – jeremyharris

2

Không có update -option, cũng giống như jeremyharris đã chỉ ra.

Nếu bạn chỉ muốn để điền vào một yếu tố với HTML nạp qua AJAX, bạn cũng có thể sử dụng $.load():

$('#assetManagerContent').load('/projects/getAssets', assetData); 

Đó là cơ bản một cách viết tắt cho $.ajax() cuộc gọi tương ứng, và sẽ tự động đưa ra một yêu cầu POST nếu Tham số data có sẵn.

Xem: http://api.jquery.com/load/

0

để làm cho hành động của bạn nhanh hơn, sạch hơn và tái sử dụng bạn có thể viết nó theo cách này.

function getAssets($id = null) { 
    // Fill select form field after Ajax request. 
    if(!empty($this->data)){    
     return $this->Project->Asset->find('list', 
        array(
        'conditions' => array(
          'Asset.project_id' => '23' 
       ) 
       ) 
      );  
    } 
} 

Ajax

$.ajax({      
     url:'/projects/getAssets/'+id, 
     type:"POST", 
     success: function(data) { 
      $('#assetManagerContent').html(data); 
     } 
    }); 
OR 
$('#assetManagerContent').load('/projects/getAssets/'+id); 
0

Nó hoạt động nhưng chương trình dẫn đến chế độ văn bản. ví dụ:

<form action="/amit/tour-writer/derivedItineraries/getHotelDetail/1230" 
id="DerivedItineraryGetHotelDetailForm" method="post" accept-charset="utf-8"> 
<div style="display:none;"><input type="hidden" name="_method" value="POST"/> 
</div> 
<div class="required"><label for="DerivedItineraryInclusion">Inclusion</label> 
<textarea name="data[DerivedItinerary][inclusion]" class="ckeditor" 
required="required" style="width:200px;" cols="30" rows="6" 
id="DerivedItineraryInclusion">Test data</textarea></div></td></tr> 
</form>