Ajax不发送数据[Codeigniter]


Ajax send no data [ Codeigniter ]

我在ajax方面遇到了问题,事实上,我试图在提交之前用ajax将值发送到我的上传函数。但是,当我在php代码中检查$_POST数组时,只有表单的值,而没有来自ajax的值,我不知道为什么。这是我的代码:

HTML:

<button id="btn_saisie" class="btn btn-app saver adddocu" ><i class="fa fa-save whiter"></i></button>
<form action="/uploader/adddocu" id="form_saisie" class="form_saisie" method="POST" enctype="multipart/form-data">
<input type="file" name="document" class="val_peage form-control form_num" id="document" data-rest="document" placeholder="Document">
<input type="text" name="description" class="val_parking form-control form_num" id="description" data-rest="description" placeholder="Description">

JS:

$( ".adddocu" ).click(function() {
if ($('#document').val() != "" && $('#description').val() != ""){
    api_sendvalue_adddoc();
}
if ($('#document').val() == "")
    alert('test');
else if ($('#description').val() == "")
    alert('test2'); });

function api_sendvalue_adddoc(){
user = JSON.parse(sessionStorage.getItem('user'));
pays = localStorage.getItem("pays");
magasin = localStorage.getItem("magasin");
$.ajax({
    type: 'POST',
    url: '/uploader/adddocu',
    data: {pays:pays, magasin:magasin},
    success: function(data){
                alert(data);
                $("#form_saisie").submit();
      console.log(data);
    },
            error: function(xhr){
                alert(xhr.responseText);
                console.log(xhr.responseText);
            }
}); }

PHP:

public function adddocu(){
    $path = './asset/upload/pdf/';
    $path2 = '/asset/upload/pdf/';
    $config['upload_path']   = $path;
    $config['encrypt_name']   = false;
    $config['file_ext_tolower']  = true;
    $config['allowed_types']  = 'pdf';
    // die(var_dump($_POST));
    $this->load->library('upload', $config);
    foreach($_FILES as $id => $name)
    {
        $this->upload->do_upload('document');
        $upload_data = $this->upload->data();
        $url =  $path2 . $upload_data['file_name'];
        $data = array('nom' => $upload_data['raw_name'], 'description' => $_POST['description'], 'url' => $url, 'user_id' => '17');
        $this->db->insert('pdf', $data);
    }
    redirect("/login/docu");
}

因此,当我var_dump$_POST数组时,我只有"description"的值,而没有"pays"answers"magasin"的值。

你能帮我吗?

谢谢你抽出时间。

似乎您正在访问本地存储值,您正在将其发布到某个位置,然后提交表单。

你提交的表格中没有这个pays&magasin,所以我有一个技巧,你可以使用它来实现。

在HTML表单中创建两个隐藏的输入,如

<input type="hidden" name="pays" id="pays">
<input type="hidden" name="magasin" id="magasin">

现在,在ajax调用之前,在从本地存储获取值之后,给它们赋值,如下所示。

user = JSON.parse(sessionStorage.getItem('user'));
pays = localStorage.getItem("pays");
magasin = localStorage.getItem("magasin");
$("#pays").val(pays);
$("#magasin").val(magasin);
$.ajax({ .... });

继续您的代码并享受。希望它对你有用。

问题是因为您没有阻止form正常提交,所以AJAX请求被取消。不使用buttonclick事件,而是挂接到formsubmit事件并调用preventDefault()。试试这个:

$('#form_saisie').submit(function(e) {
    e.preventDefault();
    if ($('#document').val() != "" && $('#description').val() != ""){
        api_sendvalue_adddoc();
    }
    if ($('#document').val() == "")
        alert('test');
    else if ($('#description').val() == "")
        alert('test2'); 
});

编辑:

下面是一个ajax post-to-codeigniter的工作示例:

查看

<script> 
    $( document ).ready(function () {
      // set an on click on the button
      $("#button").click(function () {
        $.ajax({
              type: 'POST',
              url: "[page]",
              data: {pays: "asd", magasin: "dsa"},
              success: function(data){
                          alert(data);
                          $("#text").html(data);
                       console.log(data);
              },
                      error: function(xhr){
                          alert(xhr.responseText);
                          console.log(xhr.responseText);
                      }
          });
      });
    });
  </script>

控制器

<?php
    // main ajax back end
    class Time extends CI_Controller {
        // just returns time
        public function index()
        {
            var_dump($_POST);
            echo time();
        }
    }
?>

输出

array(2) {
  ["pays"]=>
  string(3) "asd"
  ["magasin"]=>
  string(3) "dsa"
}
1473087963

此处的工作示例

因此,您应该在开发控制台上检查您从AJAX发出的请求。在那里,您应该得到var_dump($_POST(的响应。

要进行调试,请尝试让您的控制器只返回$_POST数据,对其余数据进行注释。在javascript方面,同样的事情,只测试ajax帖子和接收到的数据。