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

时间:2012-06-13 19:28:21

标签: ruby-on-rails ajax json

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

2 个答案:

答案 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'] %>");