将值传递到外部js文件中

时间:2013-01-16 21:51:03

标签: php javascript ajax cakephp

嘿,我希望有人可以帮助我,

我有一个外部js文件,它位于webroot / 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文件中创建的。

我真的很感激任何建议!

3 个答案:

答案 0 :(得分: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创建后回显ID

echo $asset_id; // some INT id

答案 1 :(得分:0)

所以你可能想要考虑HTML部分。这些是HTML的一小部分,代表从单个标签到弹出窗口的任何内容。重要的是它没有或标签。

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

答案 2 :(得分: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;
    }
}