当我传递静态数据时,它将成功存储数据。当我通过动态时,它不会存储data.how来传递动态数据

时间:2018-01-25 11:54:30

标签: javascript ajax codeigniter

当我通过静态时,它将成功存储在数据库中。当我传递动态数据时,它不会存储在数据库中。在我的视图中,表单id为 signupform ,其中包含5个字段。

这是我的.js文件

$(document).on("submit","#signupform",function(e){ 
    e.preventDefault();

    //var view_id=$("#id_hid").val();
    //alert(view_id);
    console.log($('#signupform').serialize());
    var data = {'username' : 'username' , 'password' : 'password' , 'email' : 'email' , 'mobileno' : 'mobileno' , 'address' : 'address' };
    data = $('#signupform').serialize() + '&' + $.param(data);

    $.ajax({
        type:"POST",
        data:data,//$('#signupform').serialize(),
        dataType: "JSON",
        url:"../welcome/add",       
        success:function(data){
            //var json=$.parseJSON(data);
            //$('#signupform').html(response);
            alert(data);
        }
    });
});

**这是我的控制器文件**

public function add(){
    $data=array();
    $postData=array();

    //prepare post data
    $postData = array(
        'username' => $this->input->post('username'),
        'password' => $this->input->post('password'),
        'email' => $this->input->post('email'),
        'mobileno' => $this->input->post('mobileno'),
        'address' => $this->input->post('address')
    );  


    //print_r($postData);

    //insert post data

    $insert = $this->home_model->insert_form($postData);
    $data['msg']= "data insert successfully";
    echo json_encode($data['msg']);
}

这是我的模型文件

function insert_form($data){

    $insert=$this->db->insert('emp',$data);
    if($insert){
        return $this->db->insert_id();
    } else {
        return false;
    }
    echo  json_encode($data);
}

2 个答案:

答案 0 :(得分:1)

如果您想发布字符串数据,可以删除dataType: "JSON"

或者您可以使用此方法

$(document).on('submit', '#signupform', function (e) {
  e.preventDefault();
  var data = {username: 'username', password: 'password', email: 'email', mobileno: 'mobileno', address: 'address'};
  data = Object.assign({}, $('#signupform').serializeArray()[0], data);
  console.log(data);

  $.post('your backend url', data, function (result) {
    console.log(result);
  })
})

答案 1 :(得分:1)

您不需要定义data对象。 serialize()方法会为您做到这一点。但是,因为您正在发布POST,所以应该使用serializeArray()serialize()面向GET请求。

$(document).on("submit","#signupform",function(e){ 
    var data;
    e.preventDefault();
    data = $('#signupform').serializeArray();

    $.ajax({
        type:"POST",
        data:data,
        dataType: "JSON",
        url:"../welcome/add",       
        success:function(data){
            //data is an object. If you want the text returned use data.msg
            //$('#some-message-div').text(data.msg);
            console.log(data); //an object with one property - 'msg'
        }
    });
});

控制器方法可以简化很多。由于字段名称与表列名称完全匹配,因此无需构建$postData数组。发布的数据已经具有确切的结构。 $this->input->post()将返回您需要的内容。

public function add()
{
    //insert post data
    if($this->home_model->insert_form($this->input->post()))
    {
        $data['msg'] = "data insert successfully";
    }
    else
    {
        $data['msg'] = "insert failed";
    }
    echo json_encode($data);
}

模型可以更清洁。

function insert_form($data)
{
    if($this->db->insert('emp', $data))
    {
        return $this->db->insert_id();
    }
    //don't need else when the if condition calls return
    return false;
}

echo json_encode($data);行无用。编码行的方式从未执行 - 返回if和else块。即使它确实执行了,模型也是错误的。