5

我正在用 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

4 回答 4

5

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

$.ajax({                    
    url:'/projects/getAssets',
    type:"POST",                                        
    data:assetData,
    //dataType:'text',
    success: function(data) {
      $('#assetManagerContent').html(data);
    }
});
于 2013-01-18T20:09:11.463 回答
2

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

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

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

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

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

于 2013-01-18T20:11:15.293 回答
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({                    
        url:'/projects/getAssets/'+id,
        type:"POST",
        success: function(data) {
          $('#assetManagerContent').html(data);
        }
    });
OR
$('#assetManagerContent').load('/projects/getAssets/'+id);
于 2013-12-13T10:33:56.627 回答
0

它可以工作,但以文本模式显示结果。例如

 <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>
于 2014-07-18T11:57:11.447 回答