【问题标题】:code igniter - how to submit an ajax javascript object to the database with jQuerycodeigniter - 如何使用 jQuery 将 ajax javascript 对象提交到数据库
【发布时间】:2015-08-20 14:49:20
【问题描述】:

我有一个要提交到我的 codeigniter 数据库的 javascript 数据数组:

[
  {
    "name": "title",
    "value": "myTitle"
  },
  {
    "name": "content",
    "value": "myContent."
  }
]

我想将此数据提交给 codeigniter,并让它更新数据库。 请注意,这不是来自表单的数据,所以我不能只使用典型的代码点火器 form_open() / serialize() 方法。我正在使用 ajax 帖子并动态构建数据:

    var submissionData = [];
    instanceFields.each(function(index){
            var $thisField = $(this);
            var thisData = {};
            thisData.name =$thisField.attr('data-name');
            thisData.value = $thisField.text();
            submissionData.push(thisData);
    });

    var submissionString = {arr: JSON.stringify(submissionData)};
    var submissionURL = baseURL + 'instances/edit';
    $.ajax({
    type: "POST",
    url: submissionURL,
    data: submissionString,
    success: function(data){
        console.log("success:",data);},
    failure: function(errMsg) {
        console.error("error:",errMsg);
    }

通常,对于从表单发布的数据,我可以在代码点火器中这样访问它:

$this->input->post('title')

但如果我在这里回显,我会得到一个空字符串。

然后我会像这样插入数据:

$data = array(

            'title' => $this->input->post('title'),
            'content' => $this->input->post('content'),

        );

        return $this->db->insert('extra_instances', $data);

如果我解码 JSON 并进行 var 转储,它看起来像这样:

success: array(5) {
  [0]=>
  object(stdClass)#19 (2) {
    ["name"]=>
    string(5) "title"
    ["value"]=>
    string(21) "myTitle"
  }
  [1]=>
  object(stdClass)#20 (2) {
    ["name"]=>
    string(7) "content"
    ["value"]=>
    string(238) "myContent"
  }
}

如何修改它以插入数据库?

【问题讨论】:

  • 为什么所有这些循环/推送的东西?为什么不在表单对象上只使用.serialize()
  • 没有表格。我正在使用带有“contenteditable”属性的 html 字段并动态获取它们的值。

标签: javascript php ajax codeigniter post


【解决方案1】:

如果我理解你,你的意思是你想直接发送对象插入到数据库中

Javascript:您将数组发送到 $_POST 键 'insertData'

var submissionData = [];
instanceFields.each(function(index){
        var $thisField = $(this);
        var thisData = {};
        thisData.name =$thisField.attr('data-name');
        thisData.value = $thisField.text();
        submissionData.push(thisData);
});


var submissionURL = baseURL + 'instances/edit';
$.ajax({
    type: "POST",
    url: submissionURL,
    data: {
        insertData : submissionData
    },
    success: function(data){
        console.log("success:",data);
    },
    failure: function(errMsg) {
        console.error("error:",errMsg);
    }
});

PHP Controller:收到post,可以直接插入一个数组来进行两次插入。

$data = $this->input->post('insertData');
return $this->db->insert('extra_instances', $data);

【讨论】:

  • 很好的答案@jsertx upvote 5years never late Chief
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
相关资源
最近更新 更多