2

ねえ、誰かが私を助けてくれるといいのですが、

以下を使用してビューに挿入する webroot/js フォルダーにある外部 js ファイルがあります。

echo $this->Html->script('script');

js ファイルには、データベースにデータを挿入するための ajax リクエストがあります。

var assetData = { 
 "project_id":  $("#projectId").val(), 
 "asset_id":"??",
 "content": "content":$(this).html()
};
$.ajax({                    
 url:'/assets/add',
 type:"POST",                                        
 data:assetData
});

私の見解では、js ファイルで取得できるように project_id を使用して非表示のフォーム フィールドを作成しましたが、アセット アイテムは動的に作成され、作成されてアセット テーブルに保存されます。コンテンツ。

アセットを取得する最良の方法は何ですか? jsファイルで作成されたため、idを取得して保存できません。たとえば、divのidに保存できません。

提案があれば本当に感謝します!

4

3 に答える 3

2

/assets/add作成したアセットのIDを返す必要があります。

mysqlデータベースに挿入する場合、1つのオプションを使用することですmysql_insert_id(マニュアルにはmysqliとpdoの同等物があります)。

var assetData = { 
 "project_id":  $("#projectId").val(), 
 "content": "content":$(this).html()
};
$.ajax({                    
 url:'/assets/add',
 type:"POST",                                        
 data:assetData,
 dataType:'text',
 success:function (data)
 {
    assetData['asset_id'] = (int)data;
 }
});

そして、/assets/add作成後にIDをエコーアウトする必要があります

echo $asset_id; // some INT id
于 2013-01-16T22:01:59.690 に答える
0

受け取った提案を使用して、これが問題を解決する方法です。

JavaScript ファイル:

$.ajax({                    
    url:'/assets/create',
    type:"POST",                                        
    data:assetData,
    dataType:'text',
    success: function (response) {
        if (response.success) {
            alert("response: "+response);
        } else {
            //console.log(response.data, response.code);
            alert("response: "+response);
        }
    }
});

コントローラ:

public function create($id = null) {
    if ($this->data != null) {
        $this->Asset->save($this->data);
        $this->autoRender = false;
        echo $this->Asset->id;
    }
}
于 2013-01-16T23:01:18.047 に答える
0

したがって、HTML パーシャルを検討することをお勧めします。これらは、単一のタグからポップアップまで、あらゆるものを表す小さな HTML です。重要なことは、 or タグがないことです。

$.post('/assets/add', data, function (html) {
    $('#assets').append(html);
}, 'html');

データを POST した後、呼び出しによって HTML のスニペットが返されます。次に、その HTML をページの DIV に追加できます。

<div id="assets">
   <div class="asset" id="asset-1">
       <p>Asset content</p>
   </div>
</div>

コントローラー (CakePHP だと思います) には、次のものがあります。

if ($this->Asset->save($this->data)) {
    $this->autoLayout = false;
    $this->render('asset_partial.html');
}
于 2013-01-16T21:54:49.983 に答える