2013-01-18 12 views
5

Ich baue eine App in CakePHP und ich habe ein Jquery-Dialogfenster und jedes Mal, wenn der Benutzer es öffnet, möchte ich eine Jquery-Anfrage durchführen, die den Inhalt mit dem Ergebnis der Anfrage füllen wird. Ich habe eine js-Datei, die in der Webroot/js Ordner vorhanden ist, mit dem folgenden Skript:CakePHP: Rendering-Ansicht nach Ajax

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

In meinem Controller-Datei (ProjectsController) Ich habe die folgende Funktion:

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

Und schließlich I haben die Ansicht (Elemente/assets):

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

Wenn der Benutzer den Dialog der ajax-Request ausgelöst wird, öffnet sich aber nichts scheint in der #assetManagerContent div geschehen.

ich hoffe jemand kann mir sagen, was ich falsch mache

+0

eine ähnliche Position bei http://stackoverflow.com/questions/11240639/cakephp-ajax-render –

+0

ähnliche Position gefunden Gefunden auf http://stackoverflow.com/questions/11240639/cakephp -ajax-render –

Antwort

4

Soweit ich weiß, gibt es keine update Option im jQuery ajax api. Stattdessen sollten Sie den Erfolg Rückruf hinzufügen und die Daten dort füllen:

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

Ich habe eine Erfolgsfunktion verwendet und mein Ajax-Aufruf ist ein Erfolg. Ich bekomme meine aktualisierten Daten. Aber das ist das einzige, was meiner Meinung nach gesehen wird. alles andere auf der Ansicht ist verschwunden – gkalikapersaud

+0

Es klingt, als ob Sie nur alles auf der Grundlage Ihrer Auswahl ersetzen. Ersetzen Sie im obigen Beispiel "# assetManagerContent" durch den Selektor für Ihren Ansichtsinhalt (nicht den gesamten Inhalt). – jeremyharris

2

Es gibt keine update -option ist, wie jeremyharris bereits hingewiesen.

Wenn Sie nur ein Element mit HTML über AJAX geladen füllen möchten, können Sie auch $.load() verwenden:

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

Es ist im Grunde eine Abkürzung für den entsprechenden $.ajax() Anruf und werden automatisch eine POST Anfrage, wenn die Ausgabe von data Parameter ist vorhanden.

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

0

Ihre Aktion schneller, sauberer und wiederverwendbar Sie es auf diese Weise schreiben konnte.

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

Es funktioniert, aber zeigt das Ergebnis im Textmodus. z.B.

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