如何在使用rails remote:true参数提交ajax请求时指定要返回JSON对象?一旦返回JSON对象,我该如何捕获并使用它?
答案 0 :(得分:13)
有很多方法可以根据你的具体情况来回答这个问题(例如:你正在使用jquery和UJS适配器)但是我要发布我正在使用的文档中的东西来更好地理解整个过程: 我在很大程度上使用了这个伟大的post:我会更新我的答案,因为我现在也正在研究这些东西。
您可以将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类型列表供参考:Here
特定的javascript媒体类型列表:Here
从服务器发回的数据格式概述: 1.)Ajax发送请求,并将Accept标头设置为所需的MIME类型。 2.)Rails Controller检查Accept标头以确定它应该返回什么。 3.)Controller将确定该操作是否处理特定的MIME类型。 在rails 3中,我们可以使用respond_with,在控制器操作中将3.0响应为响应块。
在Rails 3.1中使用Ajax的方式概述:
我认为现在首选的方法是使用默认的dataType作为脚本,然后使用js.erb或js.coffee文件处理AJAX请求。
选项: 1.)单击“事件:插入DOM元素” 2.)通过Ajax提交表单 3.)通过Ajax删除 4.)使用Ajax进行客户端验证(在输入字段上使用数据远程) 5.)添加动态选择(在选择字段上使用数据远程) 6.)Ajax分页 - 直接返回HTML。
我在这里再次提到的是我自己的大纲/评论,要了解详细信息,请查看Andrea Singh的精彩帖子here。
答案 1 :(得分:-4)
请试试这个:
应用/控制器/ 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'] %>");