2013-01-18 16 views
5

Sto costruendo un'app in CakePHP e ho una finestra di dialogo jquery e ogni volta che l'utente lo apre voglio eseguire una richiesta jquery che popolerà il contenuto con il risultato della richiesta. Ho un file js che si trova nella cartella webroot/js, con il seguente script:CakePHP: Rendering view after ajax

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

Nel mio file di controllo (ProjectsController) Ho la seguente funzione:

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

E finalmente ho avere la vista (elementi/patrimonio):

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

Quando l'utente apre la finestra di richiesta Ajax viene attivato, ma nulla sembra accadere nel div #assetManagerContent.

spero che qualcuno mi può dire quello che sto facendo male

+0

trovato un post simile a http://stackoverflow.com/questions/11240639/cakephp-ajax-render –

+0

Trovato post simile su http://stackoverflow.com/questions/11240639/cakephp -ajax-rendering –

risposta

4

Per quanto ne so, non esiste alcuna opzione update nel jQuery ajax api. Invece, si dovrebbe aggiungere il callback successo e popolare i dati di lì:

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

Ho usato una funzione di successo e la mia chiamata ajax è un successo. ottengo i miei dati aggiornati tuttavia, questa è l'unica cosa che si vede dal mio punto di vista. tutto il resto sulla vista è scomparso – gkalikapersaud

+0

Sembra che tu stia semplicemente rimpiazzando tutto in base al tuo selettore. Nell'esempio sopra, sostituire '# assetManagerContent' con il selettore per visualizzare i contenuti (non tutti i contenuti). – jeremyharris

2

Non c'è update -opzione, proprio come jeremyharris già sottolineato.

Se si vuole solo riempire un elemento con HTML caricato tramite la tecnologia AJAX, è anche possibile utilizzare $.load():

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

Si tratta fondamentalmente di una scorciatoia per il corrispondente $.ajax() chiamata, ed emetterà automaticamente una richiesta POST se il data parametro è presente.

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

0

per rendere la vostra azione più veloce, più pulito e riutilizzabili si potrebbe scrivere in questo modo.

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

Funziona, ma mostra il risultato in modalità testo. ad es.

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