Rails 3 + UJS 使用 Ajax 进行远程调用并渲染生成的 JSON 对象的简单示例

2023-11-22

我正在尝试在我的 Rails 3 应用程序中添加一些 Ajax 功能。

具体来说,我想要一个按钮,该按钮将提交 Ajax 请求以调用控制器中的远程函数,该函数随后查询 API 并将 JSON 对象返回到页面。

收到 JSON 对象后,我想显示内容。

所有这一切也都通过新的 Rails 3 UJS 方法实现。网上有一个很好的例子/教程吗?我在谷歌上找不到一个。使用按钮作为入口点(即用户单击按钮来启动此过程)的简单示例也可以。

Edit让我用不同的方法尝试一下。我想让这个按钮查询一个外部 API,它返回 JSON,并在页面上显示该 JSON。我不知道从哪里开始。按钮本身是否查询外部API?我是否需要通过控制器,让控制器查询外部 API,获取 JSON,然后将 JSON 返回到此页面?如何显示/访问此 JSON 的内容?老实说,我找不到一个好的 Rails 3.x 示例来说明如何处理 JSON...


这是一个开始:

首先在视图中使用 link_to 方法创建按钮,例如:

=link_to "delete", "#{invitation_path(invitation)}.json", :method=>:delete, :remote=>true, :class=>"remove", :confirm=>'Are you sure you?'

请注意,我将“.json”附加到我的资源的 URL 中。这只是一个AJAX删除的例子,google link_to看看参数的含义。如果您使用参数 :remote 设置为 true 发出 HTTP 请求,换句话说,这将被转换为来自浏览器的 AJAX 调用。

其次,编写一些 javascript,以便您可以处理当用户单击步骤 1 的 link_to 时浏览器将进行的 AJAX 调用的结果。有关详细信息,您可以参阅此博客文章:http://www.alfajango.com/blog/rails-3-remote-links-and-forms/

我的网站的一个例子:

jQuery(function($) {
  // create a convenient toggleLoading function
  var toggleLoading = function() { $("#loading").toggle() };

  $("#pending_invitation")
    .live("ajax:loading",  toggleLoading)
    .live("ajax:complete", toggleLoading)
    .live("ajax:success", function(event, data, status, xhr) {
       var response = JSON.parse(xhr.responseText)
       if (response.result == "ok") {
          $(this).fadeOut('fast');
       }
       else {
         var errors = $('<div id="error_explanation"/>');
         errors.append('<h2>Pending invitation action error</h2><ul><li>' + response.error + '</li></ul>');
         $('#new_invitation_error').append(errors)   
       }
    });
});

您可以在其中看到我解析返回的 json 并据此更改页面上的 html。请注意,此 js 使用顶部视图中定义的 CCS id 和类,但此处未包含。

如果您现在想编写自己的控制器来吐出 json,这里是一个示例:

class InvitationsController < ApplicationController
  respond_to :html, :json

  # other methods here
  # ...

  def destroy
    @invitation = Invitation.find(params[:id])
    respond_to do |format|
      if @invitation
        @invitation.destroy
        flash[:success] = I18n.t 'invitations.destroy.success'
        format.json { render :json =>{:result => "ok", :message=>"Invitation #{params[:id]} was destroyed", :resource_id=>params[:id] } }
      else
        format.json { render :json => { :result=>"failed", :error=>"Cannot find Invitation #{params[:id]}", :resource_id=>params[:id] } }
      end
    end
  end
end

希望这有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 3 + UJS 使用 Ajax 进行远程调用并渲染生成的 JSON 对象的简单示例 的相关文章

随机推荐

  • Meteor.js:查找所有文档并以相反的自然顺序返回

    我正在尝试返回集合中的所有文档 以将其与模板中的 each 一起使用 我的代码如下所示 return Answers find sort natural 1 但文档按自然顺序返回 而不是反向 有谁知道为什么 我从 MongoDB 文档中获取
  • WinMerge:如何在比较中忽略特定单词?

    当我在 Windows 平台上使用 WinMerge 比较 2 个文件时 您知道如何忽略特定单词吗 我的意思是我想对 WinMerge 说 不要关心那串单词 房子 花园等 所以当比较这两行时 the house is at london t
  • 由于来自 localhost 的 CORS 问题,请求失败

    我在 SO 和不同的博客上看到了几十个问题 并用 答案 谈论这个问题 但都无济于事 我的本地计算机 Ubuntu 16 04 上有一个 React js 应用程序 在本地 我尝试通过运行来测试它npm start它会打开浏览器http 本地
  • 列出所有当前打开的文件句柄? [复制]

    这个问题在这里已经有答案了 可能的重复 检查Python中打开了哪些文件 Hello 是否可以获得所有当前打开的文件句柄的列表 我认为它们存储在环境中的某个位置 我对这个函数感兴趣 因为我想安全地处理出现致命错误时打开的任何文件 即关闭文件
  • 使用 Python 使用 IAM 角色连接到 Redshift

    我正在使用 sqlalchemy 和 psycopg2 将 python 连接到 redshift engine create engine postgresql user password hostname port database n
  • Slick,如何将查询映射到继承表模型?

    Slick 如何将查询映射到继承表模型 IE 我有表A B C A 是 父 表 B 和 C 是 子 表 我想知道的是我应该如何使用 slick 对此进行建模 以便 A 将是抽象的 B C 具体类型 并且查询 A 中的行将导致 B 或 C 对
  • 为什么 for_each 通过 move 返回函数

    我正在阅读文档std for each here http en cppreference com w cpp algorithm for each并看到返回值是std move f 为什么标准强制在返回值中移动输入参数 既然输入参数是按值
  • C++11 中的 POD 和继承。 struct的地址==第一个成员的地址吗?

    我编辑了这个问题以避免分心 在任何其他问题有意义之前 需要先解决一个核心问题 向任何现在看来答案似乎不那么相关的人道歉 让我们设置一个具体的例子 struct Base int i 没有虚方法 也没有继承 通常是一个非常愚蠢和简单的对象 因
  • 如何在 Nuxt 3 应用程序中添加页面加载器

    我正在使用 Nuxt 3 构建一个应用程序 我想添加一个页面加载器直到网站加载 根据本文 有一种简单但有限的解决方案和一种完全定制的解决方案 内置
  • Oracle:消除表和模式名称之间的歧义

    假设我有模式A and B 在模式中A我想打电话包X在模式中B 然而 有一个包B在模式中A A package B B package X 当我从架构 A 调用时 begin b x foo end 它寻找程序X包装内B i e A B X
  • Python:freeze.py 在哪里?

    有人知道 2 6 5 的 freeze py 安装在哪里吗 我似乎无法在任何地方找到它 是不是被拔出来换成别的东西了 它就在它一直在的地方 在下面Tools 在源分布中
  • 如何使用 Work Light 通过服务器端 javascript 发出 HTTPS 请求?

    我正在玩弄IBM 工作灯 并且我正在尝试创建一个适配器来从Google 地点 API 我想调用这个网址 https maps googleapis com maps api place search json key AIzaSyCTlPm
  • Haskell 中目录的流式递归下降

    我正在尝试使用 Haskell 进行目录结构的递归下降 我只想根据需要 懒惰地 检索子目录和文件 我编写了以下代码 但是当我运行它时 跟踪显示在第一个文件之前访问了所有目录 module Main where import Control
  • Haskell 中生成列表的唯一组合的函数

    是否有一个 Haskell 函数可以从列表中生成给定长度的所有唯一组合 Source 1 2 3 uniqueCombos 2 Source 1 2 1 3 2 3 我尝试在 Google 中查找 但找不到专门执行此操作的函数 排列不会给出
  • H5py存储字符串列表的列表

    h5py 是否有可能创建一个由字符串列表组成的数据集 我尝试创建一个可变长度的嵌套数据类型 但这会导致我的 python 解释器出现分段错误 def create dataset h5py file data I am a sentecne
  • 我们可以在 Web 应用程序中同时使用 jQuery 和 AngularJS 吗?

    我们可以在 Web 应用程序中同时使用 jQuery 和 AngularJS 吗 我读过一些建议 说不要在项目中同时使用两者 因为两者都有不同的生命周期 我们的要求是使用 ASP NET WebApi 和 AngularJS 构建响应式 W
  • 我应该在我的最新项目中使用 Cocoa 绑定吗?

    我正在启动一个项目 我认为该项目将从绑定中受益 我有一个源列表表 几个浏览器视图等 但我认为如果没有它们 它也是相当可行的 也许更容易理解 根据我有限的经验 我发现绑定很难排除故障 而且非常 神奇 例如 很难在任何地方插入日志记录来找出哪里
  • 使用正则表达式检查密码强度

    该功能是查看密码的强度 如果满足以下条件 则被认为是强的 长度大于或等于10个字符 它至少包含一位数字 至少有一个大写字母 一个小写字母 密码只能包含 ASCII 拉丁字母或数字 有没有办法减少函数中的代码量 请帮我使函数代码少于200个字
  • Powershell,使用 contains 检查文件是否包含某个单词

    我正在尝试创建一个 powershell 脚本 该脚本查看给定目录下的所有文件和文件夹 然后将 properties 文件中给定单词的所有实例更改为另一个给定单词的实例 我在下面写的内容就是这样做的 但是我的版本控制注意到每个文件中的更改
  • Rails 3 + UJS 使用 Ajax 进行远程调用并渲染生成的 JSON 对象的简单示例

    我正在尝试在我的 Rails 3 应用程序中添加一些 Ajax 功能 具体来说 我想要一个按钮 该按钮将提交 Ajax 请求以调用控制器中的远程函数 该函数随后查询 API 并将 JSON 对象返回到页面 收到 JSON 对象后 我想显示内