无法从代码点火器中的 JQuery Ajax 请求检索发布数据


Can't Retrieve Post data from JQuery Ajax request in Code Igniter

我正在使用 AJAX

来创建过滤机制,在我的代码中,我从过滤器字段中获取数据并通过 AJAX 请求将它们发送到控制器,当我收到数据时,我会相应地更新表。

这是我的 Ajax 脚本:

var suppliername = "Apple";
jQuery.ajax({            
    type: "POST",           
    url: "<?php echo base_url(); ?>index.php/Welcome/get",            
    dataType: "json",
    data: {
        supplier_name: suppliername,
    },
    success: function(html){
        console.log("yay");
        hot.loadData(html);         
    }        
}); 

这是我的控制器:

public function get(){
        $where="";
        $field="supplier_name";
        $value=$this->input->post($field);
        if($value!= null){
            $supplier_name = $value;
            $where = $where.$field.'="'.$value.'"';
            $where = $where." AND ";
        }
        else{
            $where = $where.$field.'='.$field;
            $where = $where." AND ";
        }
        $field="category";
        $value=$this->input->post($field);
        if($value!= null){
            $supplier_name = $value;
            $where = $where.$field.'="'.$value.'"';
            //$where = $where." AND ";
        }
        else{
            $where = $where.$field.'='.$field;
            //$where = $where." AND ";
        }
        echo json_encode($this->inventory_m->get(null,$where));
        die();
    }

当我手动编辑控制器中的值时,过滤器工作正常,但是当我使用 $this->input->post($field) 时,它什么也不做,我尝试打印 get 和 post 数组,两者都是空的。

我不允许发表评论,所以我将其作为答案发布。

这是我对问题的解决方案和解释。这与 CodeIgniter 无法获取JSON . jQuery做一些幕后技巧并将您的数据转换为form-data-x,这就是它起作用的原因。

解决方案是使用 $this->input->raw_input_stream 获取您的JSON并使用 phpjson_decode对其进行解码。检查下面的完整答案和代码:

在CodeIgniter中检索JSON POST数据

我通过在按钮事件中执行 ajax 来解决此问题(因为我手动传递参数(var x = "some_argument")进行测试)并且它起作用了,我不确定为什么这会有所作为,但它有效(如果有人知道为什么我很想知道)。