值不从ajax传递给控制器

时间:2018-02-22 06:10:28

标签: jquery json ajax codeigniter

这里我想将数据中的值传递给控制器​​,所以我给出了这样的代码。

$("#sup_box").on("submit", function (e) {
    e.preventDefault();
    var toPost = $('.row_selected input').serialize();
    alert(toPost);
    $('.submit_data').text(toPost);
    $.ajax({
        type: "post",
        url: "<?php echo base_url();?>app/admin_control/add_data",
        data: toPost,
        dataType:"text",
        success: function (data) {
          alert("hai");
     },
        error: function (data) {
     alert("not");
  }
    });
});

我的控制器看起来像这样。

 public function add_data()
    {

      $bill_no = '000';
      $data = $_POST['data'];
      var_dump($data);
      $data1 = json_decode($data,true);
      var_dump($data1);
     foreach($data1 as $r) {
       $data = array('user_id'=>1,'bill_no'=>$bill_no);
       $this->Admin_model->add_data($data);

 }
}

但是当我进入控制器时,我在控制台

中收到undefined index data这样的错误

我的toPost变量包含这样的值

add_type%5B%5D=super&add_number%5B%5D=324&add_quantity%5B%5D=44&add_amount%5B%5D=440.00&add_checkbox=1&add_profit%5B%5D=440.00&add_agent_amount%5B%5D=0.00

4 个答案:

答案 0 :(得分:1)

如果此处提及的submit_data是表单字段

$('.submit_data').text(toPost);

尝试通过

获取数据
$data = $_POST['submit_data'];

答案 1 :(得分:1)

序列化基本上是这样的:

data: {
    'field_name_1': 'field_value_1',
    'field_name_2': 'field_value_2',
}

并且:field_name_1=field_value_1&field_name_2=field_value_2

而不是你必须手动构建它^它为你做。因此,通过帖子存在的唯一变量变为$_POST['field_name_1']$_POST['field_name_2']。您可以通过print_r($_POST);确认查看哪些帖子密钥存在。

您需要将row_selected放入一个我们可以在php中变成数组的对象:

    $("#sup_box").on("submit", function (e) {

        e.preventDefault();
        var objs = [];
        $('.row_selected').each(function () {
            var inputs = $(this).find('input'), arr = {};
            inputs.each(function () {
                arr[$(this).attr('id')] = this.value;
            });
            objs.push(arr);
        });
        console.log(objs);
        $.ajax({
            type: "post",
            url: "<?php echo base_url(); ?>app/admin_control/add_data",
            data: JSON.stringify(objs),
            //dataType: "json",
            success: function (data) {
                //alert("hai");
            },
            error: function (data) {
                //alert("not");
            }
        });
    });

控制器:

$stream = $this->input->raw_input_stream;
$postdata = json_decode($stream);
//echo '<pre>';
//print_r($postdata);

foreach ($postdata as $item) {
    $data = array(
        'bill_no' => '1',
        'user_id' => '1',
        'type' => $item->add_type,
        'number' => $item->add_number,
        'quantity' => $item->add_quantity,
        'amount' => $item->add_amount,
        'profit' => $item->add_profit,
        'agent_amount' => $item->add_agent_amount
    );
    $this->db->insert('sometable', $data);
    //print_r($data);
}

答案 2 :(得分:0)

出于调试目的,

在检查ajax代码时应使用console.log(toPost)

同样在PHP控制器部分,您可以使用print_r($_POST)dd($_POST)。这将帮助您找到要查找的$_POST[]数组键。

答案 3 :(得分:0)

在AJAX中

$("#sup_box").on("submit", function (e) {
    e.preventDefault();
    var toPost = $('#sup_box').serialize();

    $.ajax({
        type: "post",
        url: "<?php echo base_url();?>index.php/app/admin_control/add_data",
        data: toPost,
        # dataType:"json", if need
        success: function (data) {
            alert("hai");
        },
        error: function (data) {
            alert("not");
        }
    });
});

在PHP中

$type = $_POST["add_type"];
....

格式

<form id="sup_box"></form>