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

在我看来,我创建了一个带有 project_id 的隐藏表单字段,以便我可以在 js 文件中获取它,但是资产项是动态创建的,被创建并保存到资产表中,现在我想用更新该资产内容。

获得资产的最佳方式是什么?我无法获取 id 并将其保存,例如,在 div 的 id 中,因为它是在 js 文件中创建的。

我真的很感激任何建议!

4

3 回答 3

2

/assets/add应该返回它创建的资产的 ID。

如果您要插入 mysql 数据库,那么一种选择是使用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

因此,您可能需要考虑 HTML 部分。这些是 HTML 的一小部分,代表从单个标签到弹出窗口的任何内容。重要的是它没有 or 标签。

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

在您发布数据后,您的调用会返回一段 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 回答
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 回答