13

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

4

2 回答 2

14

有很多方法可以回答这个问题,具体取决于您的具体情况(例如:您使用的是 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() 函数中定义默认数据类型。更改所有 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 控制器检查 Accept 标头以确定它应该返回什么。3.) 控制器将确定操作是否处理特定的 MIME 类型。在 Rails 3 中,我们可以使用 respond_with,在 3.0 之前,它是控制器动作中的一个 respond_to 块。

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

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

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

同样,我在这里包括的是我自己的大纲/评论,要了解详细信息,请查看 Andrea Singh 的精彩帖子

于 2012-06-13T21:45:13.780 回答
-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'] %>");
于 2012-06-16T17:21:08.113 回答