CakePHP:ajax之后的渲染视图

时间:2013-01-18 19:59:19

标签: ajax cakephp cakephp-2.0

我正在CakePHP中构建一个应用程序,我有一个jquery对话框窗口,每次用户打开它时,我都想执行一个jquery请求,该请求将使用请求的结果填充内容。 我有一个位于webroot / js文件夹中的js文件,其中包含以下脚本:

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

在我的控制器文件(ProjectsController)中,我有以下功能:

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

最后我有了视图(元素/资产):

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

当用户打开对话框时,会触发ajax请求,但#assetManagerContent div中似乎没有任何内容。

我希望有人可以告诉我我做错了什么

4 个答案:

答案 0 :(得分:5)

据我所知,jQuery ajax api中没有update选项。相反,您应该添加成功回调并在那里填充数据:

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

答案 1 :(得分:2)

没有update - 选项,正如jeremyharris已经指出的那样。

如果您只想用通过AJAX加载的HTML填充元素,您还可以使用$.load()

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

它基本上是相应$.ajax()来电的简写,如果POST参数存在,它会自动发出data请求。

请参阅:http://api.jquery.com/load/

答案 2 :(得分:0)

为了让您的行动更快,更清洁,可重复使用,您可以这样写。

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

答案 3 :(得分:0)

它有效但在文本模式下显示结果。 e.g。

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