Hello all, I''m trying to send some json data from the browser to the server using prototype without success. On the server side ActiveSupport::JSON.decode isn''t decoding the data. Here is the code: Javacript: <a href="#" onclick=''send();return false;''>click</a> <script> function send() { var send_data_url = "/pages/change"; var json_parameters = $H({name: ''Violet'', occupation: ''character'', age: 25 }).toJSON(); new Ajax.Request(send_data_url, { method: ''post'', parameters: json_parameters, contentType: ''application/json;'' }); } Rails: def change() debugger my_json = ActiveSupport::JSON.decode(params["_json"]) render :text => my_json end I''ve checked with the debugger that the json data that is sent to the server is the following: {"_json"=>"%7B%22name%22%3A%20%22Violet%22%2C%20%22occupation%22%3A%20%22charact er%22%2C%20%22age%22%3A%2025%7D", "action"=>"change", "controller"=>"pages"} Can anyone help me? Thanks. Best regards, Migrate -- Posted via http://www.ruby-forum.com/.
On Jul 5, 3:06 pm, Hu Ma <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> Hello all, > > I''m trying to send some json data from the browser to the server using > prototype without success. On the server side ActiveSupport::JSON.decode > isn''t decoding the data. >What happens ? render :text => my_json might produce some odd output since you''re just calling to_s on a hash which doesn''t do anything very interesting. render :text => my_json.inspect() would produce more readable output Fred> Here is the code: > > Javacript: > <a href="#" onclick=''send();return false;''>click</a> > <script> > function send() { > > var send_data_url = "/pages/change"; > var json_parameters = $H({name: ''Violet'', occupation: ''character'', age: > 25 }).toJSON(); > > new Ajax.Request(send_data_url, { > method: ''post'', > parameters: json_parameters, > contentType: ''application/json;'' > > }); > } > > Rails: > > def change() > debugger > my_json = ActiveSupport::JSON.decode(params["_json"]) > render :text => my_json > end > > I''ve checked with the debugger that the json data that is sent to the > server is the following: > {"_json"=>"%7B%22name%22%3A%20%22Violet%22%2C%20%22occupation%22%3A%20%22ch aract > er%22%2C%20%22age%22%3A%2025%7D", "action"=>"change", > "controller"=>"pages"} > > Can anyone help me? > > Thanks. > Best regards, > Migrate > -- > Posted viahttp://www.ruby-forum.com/.
Hello Fred, Thanks for the answer but the problem remains. The "render :text => my_json" part is just a debug line I added. I''m interested in manipulating the json data before sending an answer to the browser. I''ve done what you said but my_json.inspect() returns the same output. From what I gathered the my_json is returned as a String object instead of an Hash. Example: (rdb:5) my_json = ActiveSupport::JSON.decode(params["_json"]) "%7B%22name%22%3A%20%22Violet%22%2C%20%22occupation%22%3A%20%22character%22%2C%2 0%22age%22%3A%2025%7D" (rdb:5) my_json.class String If I use the same json string directly in the controller in Rails the decode works so it must have something to do with the way I''m creating the Ajax request, but I still don''t know what I''m doing wrong. Example: (rdb:5) my_json2 = ActiveSupport::JSON.decode("{name: ''Violet'', occupation: ''character'', age: 25 }") {"occupation"=>"character", "name"=>"Violet", "age"=>25} (rdb:5) my_json2.class Hash Best regards, Migrate Frederick Cheung wrote:> On Jul 5, 3:06�pm, Hu Ma <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote: >> Hello all, >> >> I''m trying to send some json data from the browser to the server using >> prototype without success. On the server side ActiveSupport::JSON.decode >> isn''t decoding the data. >> > What happens ? render :text => my_json might produce some odd output > since you''re just calling to_s on a hash which doesn''t do anything > very interesting. render :text => my_json.inspect() would produce more > readable output > > Fred-- Posted via http://www.ruby-forum.com/.