【问题标题】:Jquery & Rails 3: Run controller action from js file?Jquery & Rails 3:从 js 文件运行控制器操作?
【发布时间】:2011-10-10 12:02:36
【问题描述】:

我想点击页面上的一个 div 来运行一定数量的 javascript 任务,同时也想在控制器上运行一个动作。更详细的解释:

我有一个 untitled.js 文件,其中放了一堆 jquery 代码:

 $(function(){
$('nav li').hover(function(){
        $(this).addClass("bigger", 50);
    }, function(){
        $(this).removeClass("bigger", 50);
});

$('#notify').click(function(){
        $('.notifications').show();
});

$('#notify').click(function(){
        (some code to run a controller action)
});


 });

我想在单击#notify 按钮时在“用户”控制器上运行一个名为“run_tasks”的控制器操作,并显示一个通知类。正如您在上面的代码中看到的那样,我已经整理了用于显示 .notifications 的 jquery 代码,但我不知道在“(运行控制器操作的一些代码)”中放入什么。为了提供有关控制器操作的信息,它只会运行一些我想要运行的任务,它不会重定向到新页面或任何东西。这是用户控制器的基本格式:

 class UsersController < ApplicationController
      ....
      def run_tasks

      end
 end

我正在尝试做的事情是否可行,如果可以,我应该在其中放入什么 jquery 代码?我正在使用 Rails 3.0.9 和最新的 jquery。

【问题讨论】:

    标签: jquery ruby-on-rails ruby-on-rails-3 routing controller


    【解决方案1】:

    只要您有该控制器操作的路由,您就可以通过简单地使用 jQuery 的 $.get() 向它发出 ajax 请求来使其运行。

    $('#notify').click(function(){
        $('.notifications').show();
        $.get('/users/run_tasks');
    });
    

    也不需要两个$('#notify').click(),你可以将两个语句放在一个块中(就像我在上面的代码sn-p中所做的那样)。

    请注意,在这种情况下,.get() 只是发出调用服务器上控制器操作的请求并忽略结果,但您也可以使用它来处理控制器返回的数据。参考上面的文档链接。

    【讨论】:

    • 我还会考虑使用块来代替硬编码的 URL。像 'run_tasks', :controller => 'users' %> 之类的东西(对不起,我面前没有例子)。这将允许您移动应用程序而无需修改每次的 URL。
    • 有趣 - 不应该使用 '/users/run_tasks' 路由到同一个控制器/操作,无论应用程序的位置如何(本地主机与在线)?此外,您的代码确实有效,但它失败了,因为控制器将 run_tasks 视为它应该为用户 ID 读取的变量,而不是对控制器操作的引用。这是为什么呢?
    • -- 使用您的代码找出替代解决方案。感谢大家的帮助!
    猜你喜欢
    • 1970-01-01
    • 2011-05-06
    • 2013-04-07
    • 2020-01-02
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多