如何指定我希望在使用 rails remote: true 参数提交 ajax 请求时返回 JSON 对象?一旦返回 JSON 对象,我该如何捕捉和使用它?
2 回答
有很多方法可以回答这个问题,具体取决于您的具体情况(例如:您使用的是 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 的精彩帖子。
请试试这个:
应用程序/控制器/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'] %>");