3

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.

Ahmed Saad
  • 177
  • 2
  • 12
  • do you mean it works `$this->input->post('supplier_name');`? remember you did not passed `category` from your ajax. your query is producing wrong when you have value for category. – Shaiful Islam Jun 11 '15 at 15:07
  • manually set category `value=null` and check if it is really working – Shaiful Islam Jun 11 '15 at 15:12
  • no it doesn't, i mean when i set the value of $value manually the filter works – Ahmed Saad Jun 11 '15 at 15:12
  • Did you checked with what I said with my second comment? – Shaiful Islam Jun 11 '15 at 22:36
  • yes, it append the empty query and it works as it should – Ahmed Saad Jun 12 '15 at 00:49
  • how come it works?I see if your category value=null ,whatever your supply_name your $where condition ends with only ' AND'how come it works or you did something else that is not added at your question. – Shaiful Islam Jun 12 '15 at 00:53
  • When the category = null the query will be ****** AND 'category' = 'category' which is always true. so it's as it doesn't exist at all but also it will give me the option to change the value to apply a certain filter – Ahmed Saad Jun 12 '15 at 09:04

2 Answers2

1

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:

Retrieve JSON POST data in CodeIgniter

Community
  • 1
  • 1
jimasun
  • 604
  • 9
  • 12
0

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).

Ahmed Saad
  • 177
  • 2
  • 12