user1648746
user1648746

Reputation: 23

posting array using ajax to the controller in cakePHP

I am relatively new to cake and I am struggling with a custom filter that im making in order to display products based on which checkboxes have been ticked. The checkboxes get populated based on which attributes the user creates in the backend, i then collect all the values of the selected boxes into an array with javascript and post it to the controller, but for some reason I cannot access the controller variable named '$find_tags' in my view, it throughs undefined variable. Here is my javascript and ajax which collects and posts correctly (when i firebug it 'data' in my controller has array values which im posting) so thats fine

$("#clickme").click(function(event){    
    event.preventDefault();
    var searchIDs = $("#checkboxes input:checkbox:checked").map(function(){
        return $(this).val();
    }).get();

    var contentType = "application/x-www-form-urlencoded";
    var data = 'data[ID]='+searchIDs;
    $.post("",data,function(data){
        console.log(data);
    });

    });

Here is my controller code which im assuming is where the fault lies

if ($this->request->is('post') ) {
     $data = $this->request->data['ID'];
     $find_tags = array();   
     $selected_tags = $data;
     foreach($selected_tags as $tag)
     {
        array_push($find_tags,$this->Product->findByTag($tag));
        $this->set('find_tags', _($find_tags));
     }
  }

And here is my view code where i get Undefined variable: find_tags

foreach($find_tags as $all_tag)
  {
  echo $all_tag['Product']['name'];
  echo '</br>';
  }

Any help or suggestions would really be appreciated been struggling with this for a while now

Upvotes: 2

Views: 1819

Answers (1)

M Khalid Junaid
M Khalid Junaid

Reputation: 64466

If searchIDs is array of ids you just need to make the json of array and then send to your controller

$("#clickme").click(function(event){    
    event.preventDefault();
    var searchIDs = $("#checkboxes input:checkbox:checked").map(function(){
        return $(this).val();
    }).get();

    var contentType = "application/x-www-form-urlencoded";
    var data = 'ids='+JSON.stringify(searchIDs);
    $.post("controller url",data,function(data){
        console.log(data);
    });

    });

On php side you are getting wrong variable

if ($this->request->is('post') ) {
     $data = $this->request->data['ids'];
     $find_tags = array();   
     $selected_tags = $data;
     foreach($selected_tags as $tag)
     {
        array_push($find_tags,$this->Product->findByTag($tag));

     }
   $this->set('find_tags', _($find_tags));
  }

Upvotes: 1

Related Questions