5

私は CakePHP でアプリを構築しています。jquery ダイアログ ウィンドウがあり、ユーザーがそれを開くたびに、コンテンツにリクエストの結果を入力する jquery リクエストを実行したいと考えています。次のスクリプトを含む js ファイルが webroot/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

私の知る限り、jQueryajaxapiupdateにはオプションがありません。代わりに、成功コールバックを追加し、そこにデータを入力する必要があります。

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

updatejeremyharrisがすでに指摘したように、オプションはありません。

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 に答える