I am using AJAX to create a filtering mechanism, in my code i get the data from the filter fields and send them to the Controller through the AJAX request, when i receive the data i update the table accordingly.
This is my Ajax Script:
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);
}
});
And this is my Controller:
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();
}
when i manually edit the values in the controller the filter works perfectly, but when i use $this->input->post($field) it does nothing, i tried to print the get and post arrays and both are empty.
I am not allowed to comment so I am posting it as an answer.
Here is my solution and explanation for the problem. It has to do with CodeIgniter not being able to fetch JSON
. jQuery
does some under the hood tricks and transforms your data into form-data-x
, that's why it works.
The solution is to use $this->input->raw_input_stream
to fetch your JSON
and decode it using php
's json_decode
. Check the full answer and code below:
I Solved this by doing the ajax inside a button event (as i was passing the arguments manually (var x = "some_argument") for testing) and it worked, i am not sure exactly why did this make a difference but it worked (if anyone knows why i would love to know).