2013-01-18 13 views
5

Buduję aplikację w CakePHP i mam okno dialogowe jquery i za każdym razem, gdy użytkownik je otwiera, chcę wykonać żądanie jquery, które zapełni zawartość z wynikiem żądania. Mam pliku js, który jest w folderze webroot/js, z następującym scenariuszu:CakePHP: Rendering widok po ajax

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

W moim pliku sterownika (ProjectsController) Mam następującą funkcję:

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'); 
    } 
} 

iw końcu mają widok (elementy/aktywa):

<?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; ?> 

Gdy użytkownik otwiera okno żądania ajax jest wyzwalany, ale nic się nie dzieje w div #assetManagerContent.

Mam nadzieję, że ktoś może mi powiedzieć co robię źle

+0

Znaleziono podobnym stanowisku w http://stackoverflow.com/questions/11240639/cakephp-ajax-render –

+0

Znaleziony podobny post http://stackoverflow.com/questions/11240639/cakephp -ajax-render –

Odpowiedz

4

O ile mi wiadomo, nie ma update opcja w jQuery ajax api. Zamiast tego należy dodać zwrotnego sukces i wypełnić dane tam:

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

Użyłem funkcji sukcesu, a moje wywołanie ajaxa jest sukcesem. otrzymuję zaktualizowane dane. jednak jest to jedyna rzecz, która jest widoczna na moim zdaniem. wszystko inne na widoku zniknęło. – gkalikapersaud

+0

Wygląda na to, że po prostu wymieniasz wszystko na podstawie selektora. W powyższym przykładzie zamień '# assetManagerContent' na selektor na treść widoku (nie całą zawartość). – jeremyharris

2

Nie ma update -opcja, podobnie jak jeremyharris już zauważył.

Jeśli chcesz tylko do wypełnienia elementu z HTML ładowane za pośrednictwem AJAX, można również użyć $.load():

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

Jest to w zasadzie skrótem odpowiedniej $.ajax() połączenia i automatycznie wystawi POST wniosek, jeżeli data parametr jest obecny.

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

0

aby Twoje działanie szybsze, czystsze i wielokrotnego użytku, można to w ten sposób pisać.

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

To działa, ale pokazuje prowadzić w trybie tekstowym. np.

<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> 
Powiązane problemy