Php 如何将post输入数据发送到ajax控制器?

Php 如何将post输入数据发送到ajax控制器?,php,ajax,codeigniter,Php,Ajax,Codeigniter,我想使用ajax进行输入搜索,我已经尝试过了,但仍然失败。我想问题是,当ajax中的值没有发送到控制器时,会导致查询被忽略,我如何解决这个问题 我使用jquery-2.2.3,codeigniter 3 这是Js: <script> $('#boxProfile').hide(); $("#btnSearch").click(function(){ var name = $("#inputNameNik").val(); console

我想使用ajax进行输入搜索,我已经尝试过了,但仍然失败。我想问题是,当ajax中的值没有发送到控制器时,会导致查询被忽略,我如何解决这个问题

我使用jquery-2.2.3,codeigniter 3

这是Js:

<script>
    $('#boxProfile').hide();
    $("#btnSearch").click(function(){
        var name = $("#inputNameNik").val();
        console.log(name);
        $.ajax({
            url     : '<?php echo base_url('index.php/Search/profile') ?>',
            type    : 'POST',
            data    : { post: name },
            dataType: 'JSON',
            beforeSend: function(e) {
                if(e && e.overrideMimeType) {
                    e.overrideMimeType("application/json;charset=UTF-8");
                }
            },
            success: function(response){
                var html = '';
                var i;
                var no = 1;
                var success = 'Success';
                console.log(success);
                $.each(response, function(index, obj){
                    html += '<div class="box-body box-profile">'+
                                    '<img class="profile-user-img img-circle center" style="width: 160px; height:150px; display: block; margin-left: auto; margin-right: auto;" src="'+obj.foto+'" alt="User profile picture">'+
                                    '<hr>'+
                                    '<h2 class="profile-username text-center">'+obj.name+'</h2>'+
                                    '<p class="text-muted text-center">'+obj.nik+'</p> '+
                                    '<div class="small-box bg-red">'+
                                        '<div class="inner">'+
                                            '<h4 style="text-align:center;">Annual Leave in Year : </h4>'+
                                            '<h4 style="text-align:center;">Annual Leave in Year : </h4>'+
                                            '<h4 style="text-align:center;">Leave in Year : </h4>'+
                                            '<p style="text-align:center;">Balance Leave Now : </p>'+
                                        '</div>'+
                                    '<button type="button" class="small-box btn btn-danger" style="margin:auto;" data-toggle="modal" data-target="#Import" >Click Detail <i class="fa fa-arrow-circle-right"></i></button>'+
                                    '</div>'+
                                '</div>';
                });
                $('#boxProfile').html(html);
                $('#boxProfile').show();
            },
            error: function (xhr, ajaxOptions, thrownError) {
                console.log(xhr.responseText);
                var fail = 'Fail';
                console.log(fail);
            }
        });
    });
</script>
这是一个模型:

public function searchProfile($where){
    $this->db->select('cuti.id_karyawan as cutiIdKaryawan, karyawan.foto, karyawan.nik, karyawan.name, cuti_before.id_karyawan as beforeIdKaryawan, cuti_before.tahun as beforeTahun, cuti_before.sisa_cuti as beforeCuti, cuti.tahun as tahunCuti, cuti.sisa_cuti as cutiSisa, cuti.saldo_cuti as cutiSaldo, tanggal, detail_cuti.keterangan, jmlh_hari, tgl_cuti_dari, tgl_cuti_sampai, cuti.tahun, DATEDIFF(karyawan.tmt_startwork, now()) as start');
    $this->db->from('karyawan');
    $this->db->join('cuti', 'cuti.id = karyawan.id', 'left');
    $this->db->join('cuti_before', 'cuti_before.id_karyawan = karyawan.id', 'left');
    $this->db->join('detail_cuti', 'detail_cuti.id_karyawan = karyawan.id', 'left');
    $this->db->like('karyawan.name', $where, 'both');
    $this->db->or_like('karyawan.nik', $where, 'both');
    $this->db->limit(1);
    $query = $this->db->get();

    return $query->result_array();
}

当您发出Ajax请求时,您正在发送
post
作为输入名称的键,但在控制器中,您正在寻找
inputNameNik
作为键。这可能是您无法在控制器中获取输入的原因

虽然
inputNameNik
是html输入的id,但PHP不知道这个名称,它所拥有的只是通过post请求发送的变量名称

您正在传递
post
作为
data:
中的键,而不是实际的键,即name/id属性
nameNik
/
inputNameNik

var inputNameNik=$(“#inputNameNik”).val()//变化
console.log(名称);
$.ajax({
url:“”,
键入:“POST”,
数据:({inputNameNik:inputNameNik}),//更改
在Ajax
data:
中,您需要以
key:value
格式传递值,以便在控制器中可以使用key来获取post值

i、 e如果我传递
数据:({nameNik:inputNameNik}),
那么我将在控制器中使用它,就像
$nameNik=$this->input->post('nameNik');
因此,每当您从ajax传递post数据时,请务必使用
,您需要在控制器中使用该键从
post
获取值


请从ajax代码中删除这些行

dataType: 'JSON',
            beforeSend: function(e) {
                if(e && e.overrideMimeType) {
                    e.overrideMimeType("application/json;charset=UTF-8");
                }
            },
因此,在视图文件中,更新的代码如下所示:

<script>
    $('#boxProfile').hide();
    $("#btnSearch").click(function(){
        var name = $("#inputNameNik").val();
        console.log(name);
        $.ajax({
            url     : '<?php echo base_url('index.php/Search/profile') ?>',
            type    : 'POST',
            data    : { name: name }, //change
            success: function(response){
                var html = '';
                var i;
                var no = 1;
                var success = 'Success';
                console.log(success);
                $.each(response, function(index, obj){
                    html += '<div class="box-body box-profile">'+
                                    '<img class="profile-user-img img-circle center" style="width: 160px; height:150px; display: block; margin-left: auto; margin-right: auto;" src="'+obj.foto+'" alt="User profile picture">'+
                                    '<hr>'+
                                    '<h2 class="profile-username text-center">'+obj.name+'</h2>'+
                                    '<p class="text-muted text-center">'+obj.nik+'</p> '+
                                    '<div class="small-box bg-red">'+
                                        '<div class="inner">'+
                                            '<h4 style="text-align:center;">Annual Leave in Year : </h4>'+
                                            '<h4 style="text-align:center;">Annual Leave in Year : </h4>'+
                                            '<h4 style="text-align:center;">Leave in Year : </h4>'+
                                            '<p style="text-align:center;">Balance Leave Now : </p>'+
                                        '</div>'+
                                    '<button type="button" class="small-box btn btn-danger" style="margin:auto;" data-toggle="modal" data-target="#Import" >Click Detail <i class="fa fa-arrow-circle-right"></i></button>'+
                                    '</div>'+
                                '</div>';
                });
                $('#boxProfile').html(html);
                $('#boxProfile').show();
            },
            error: function (xhr, ajaxOptions, thrownError) {
                console.log(xhr.responseText);
                var fail = 'Fail';
                console.log(fail);
            }
        });
    });
</script>

请让我知道它是否有效。谢谢纠正ajax调用中的两个问题

如果在URL开头使用单引号
,则在URL内部使用双引号

url     : '<?php echo base_url("index.php/Search/profile") ?>',
dataType: 'JSON',
            beforeSend: function(e) {
                if(e && e.overrideMimeType) {
                    e.overrideMimeType("application/json;charset=UTF-8");
                }
            },
<script>
    $('#boxProfile').hide();
    $("#btnSearch").click(function(){
        var name = $("#inputNameNik").val();
        console.log(name);
        $.ajax({
            url     : '<?php echo base_url('index.php/Search/profile') ?>',
            type    : 'POST',
            data    : { name: name }, //change
            success: function(response){
                var html = '';
                var i;
                var no = 1;
                var success = 'Success';
                console.log(success);
                $.each(response, function(index, obj){
                    html += '<div class="box-body box-profile">'+
                                    '<img class="profile-user-img img-circle center" style="width: 160px; height:150px; display: block; margin-left: auto; margin-right: auto;" src="'+obj.foto+'" alt="User profile picture">'+
                                    '<hr>'+
                                    '<h2 class="profile-username text-center">'+obj.name+'</h2>'+
                                    '<p class="text-muted text-center">'+obj.nik+'</p> '+
                                    '<div class="small-box bg-red">'+
                                        '<div class="inner">'+
                                            '<h4 style="text-align:center;">Annual Leave in Year : </h4>'+
                                            '<h4 style="text-align:center;">Annual Leave in Year : </h4>'+
                                            '<h4 style="text-align:center;">Leave in Year : </h4>'+
                                            '<p style="text-align:center;">Balance Leave Now : </p>'+
                                        '</div>'+
                                    '<button type="button" class="small-box btn btn-danger" style="margin:auto;" data-toggle="modal" data-target="#Import" >Click Detail <i class="fa fa-arrow-circle-right"></i></button>'+
                                    '</div>'+
                                '</div>';
                });
                $('#boxProfile').html(html);
                $('#boxProfile').show();
            },
            error: function (xhr, ajaxOptions, thrownError) {
                console.log(xhr.responseText);
                var fail = 'Fail';
                console.log(fail);
            }
        });
    });
</script>
public function profile() {
    $post = $this->input->post('name');//it should be same as what you are sending from ajax field
    $query = $this->m_data->searchProfile($post);
    echo json_encode($query);
}
url     : '<?php echo base_url("index.php/Search/profile") ?>',
data    : { 'post': name },