如何使用rails remote:true参数和JSON?

在使用rails remote:true参数提交ajax请求时,如何指定要返回JSON对象? 一旦返回JSON对象,我如何捕获并使用它?

有很多方法可以根据你的具体情况来回答这个问题(例如:你正在使用jquery和UJS适配器)但是我要发布我正在使用的文档中的东西来更好地理解整个过程:我使用这个伟大的在很大程度上发布 :我会更新我的答案,因为我现在也正在处理这些事情。

您可以将data-type属性添加到DOM元素,如下所示:

<%= link_to "Add a new task", new_project_task_path(@project), "data-type" => "json", :id => "add_task_btn" %> 

您还可以在jQuery的全局$ .ajaxSetup()函数中定义默认的dataType。 更改所有Ajax请求:

 $.ajaxSetup({ dataType: 'json' }); 

第三种方式是在beforeSend回调中:

 $(“#add_some_button”).live(“ajax:beforeSend”, function(e, xhr, settings){  new_data_type = “application/json, text/javascript, */*; q=0.01”;  xhr.setRequestHeader('accept', new_data_type); }) 

(q = 0.01是0和1之间的偏好)

因此,您可以更改该dataType属性和HTTP标头以满足您的需求。 这里有一个可能的MIME类型列表供参考: 这里

和具体的javascript媒体类型列表: 这里

从服务器发回的数据格式概述:1。)Ajax发送请求,并将Accept标头设置为所需的MIME类型。 2.)Rails Controller检查Accept标头以确定它应该返回什么。 3.)Controller将确定该操作是否处理特定的MIME类型。 在rails 3中,我们可以使用respond_with,3.0之前在控制器动作中使用respond_to块。

Ajax可以在Rails 3.1中使用的方式概述:

我相信现在首选的方法是使用默认的dataType作为脚本,然后使用js.erb或js.coffee文件处理AJAX请求。

选项:1。)单击事件:插入DOM元素2.)通过Ajax提交表单3.)通过Ajax删除4.)使用Ajax进行客户端validation(在输入字段上使用数据远程)5。)添加动态选择(在选择字段上使用数据远程)6。)Ajax分页 – 直接返回HTML。

我在这里再次提到的是我自己的大纲/评论,要获得详细信息,请查看Andrea Singh 在这里的精彩post。

请试试这个:

应用程序/控制器/ examples.rb

 class ExamplesController < ApplicationController def new @my_json = { :message => "Hello json"} end end 

应用程序/视图/示例/ new.html.haml

 = link_to "New", new_examples_path :remote => true 

应用程序/视图/示例/ new.js.erb

 console.log("<%= @my_json %>"); console.log("<%= @my_json['message'] %>");