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