Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails: Pass Params Through Ajax

I need to pass params through javascript back to the server. At the moment, I pass them into javascript like so:

sendParams("<%= params[:q].to_json %>");

And then send them back like this:

function sendParams(q){
  $.ajax({
    url: '/mymodel/myaction',
    type: 'post',
    data: {'q':q},
    contentType: 'json'
  });
}

In my controller, I try to use them like I would any other params:

MyModel.where(params[:q])

But the params are coming back empty, even though firebug shows this in the POST tab:

q=%7B%26quot%3Bc%26quot%3B%3A%7B%26quot%3B0%26quot%3B%3A%7B%26quot%3Ba%26quot%3B%3A%7B%26quot%3B0%26quot%3B%3A%7B%26quot%3Bname%26quot%3B%3A%26quot%3Btitle%26quot%3B%7D%7D%2C%26quot%3Bp%26quot%3B%3A%26quot%3Bcont%26quot%3B%2C%26quot%3Bv%26quot%3B%3A%7B%26quot%3B0%26quot%3B%3A%7B%26quot%3Bvalue%26quot%3B%3A%26quot%3B2%26quot%3B%7D%7D%7D%7D%2C%26quot%3Bs%26quot%3B%3A%7B%26quot%3B0%26quot%3B%3A%7B%26quot%3Bname%26quot%3B%3A%26quot%3Bvotes_popularity%26quot%3B%2C%26quot%3Bdir%26quot%3B%3A%26quot%3Bdesc%26quot%3B%7D%7D%7D

Any idea why this information isn't getting processed by the where clause? What can I do to make the params Rails readable again?

UPDATE:

Started POST "/publications/search?scroll=active&page=6" for 127.0.0.1 at 2013-0
2-12 22:55:24 -0600
Processing by PublicationsController#index as */*
Parameters: {"scroll"=>"active", "page"=>"6"}

UPDATE 2:

The problem is apparently stemming from contentType. When I remove it, then q is sent as a Rails parameter. Unfortunately, q is still in JSON, resulting in the error:

undefined method `with_indifferent_access' for #<String:0x686d0a8>

How can I convert JSON to a params hash?

like image 636
nullnullnull Avatar asked Feb 13 '13 04:02

nullnullnull


1 Answers

Your data parameter is wrong.

You have

data: {'q':q},

It should be

data: {q: 'q'},
like image 77
Mark Stratmann Avatar answered Oct 04 '22 02:10

Mark Stratmann