首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用remote_function在Rails3中进行Ajax调用?

如何使用remote_function在Rails3中进行Ajax调用?
EN

Stack Overflow用户
提问于 2010-07-26 13:54:33
回答 5查看 23.6K关注 0票数 16

我正在尝试对我的应用程序的select box.For进行onchange调用,我正在使用前面提到的jquery.js和rails.js来使用UJS。但是,生成的代码是针对Prototype的,而不是针对jquery ajax调用的。我的代码如下所示:

代码语言:javascript
复制
<%= select_tag :category, 
       options_for_select(
           Category.find(:all,:select=>"name,id").collect{|c| [c.name,c.id]}),
       :onchange => remote_function(:url => {:controller => "posts", 
                                             :action => "filter_post",
                                             :filter =>"category"}, 
                                    :with=>"'category_id=' + $('#category').val()") %>

由此生成的代码为:

代码语言:javascript
复制
new Ajax.Request('/posts/filter_posts?filter=category', {asynchronous:true, evalScripts:true,
parameters:'category_id=' + $('#category').val() + '&authenticity_token=' +
encodeURIComponent('CCyYj1wqXtddK6pUV6bAxw0CqZ4lbBxDGQHp13Y/jMY=')})
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-02-10 22:07:45

正如谢尔盖所说:在Rails3中没有remote_function。

解决方案是不引人注意地添加onchange处理程序,如下所示:

代码语言:javascript
复制
$(function($) {
    $("#selector_for_element").change(function() {
        $.ajax({url: '<%= url_for :action => 'action_name', :id => @model.id %>',
        data: 'selected=' + this.value,
        dataType: 'script'})
    });
});

这将调用当前控制器中的action_name方法,并将selected=...的结果作为参数传递。现在您可以返回一段javascript,例如使用如下命令:

代码语言:javascript
复制
calculated = calculate_some_value_using(params[:selected])
render(:update) {|page|
  page << "$('#selector_for_field_to_update).html(#{calculated})"
}

在控制器中。你附加到''page'‘中的字符串应该是有效的javascript,如果你使用$.ajax,它将自动执行。

编辑:仅供参考,我们最近为jquery-ujs添加了一个选择更改帮助器,所以您现在可以使用内置的jquery-ujs适配器以一种不引人注目的方式完成此操作:

代码语言:javascript
复制
<%= select_tag :category_id, 
   options_for_select(
       Category.find(:all,:select=>"name,id").collect{|c| [c.name,c.id]}),
   :data => { :remote => true, :url => url_for(:controller => "posts", 
                                         :action => "filter_post",
                                         :filter =>"category") } %>

虽然公平地说,添加一个select change事件并不是真正的“不引人注目”,因为禁用了javascript的用户没有合适的后备选项,除非您的表单不依赖于AJAX请求的结果。

票数 26
EN

Stack Overflow用户

发布于 2010-12-09 08:58:57

在rails 3中没有remote_function。如果你使用jQuery,你可以这样做:

代码语言:javascript
复制
$.ajax({
    type: 'POST',
    url: 'http://your_url/blah',
    data: 'param1=value1&params2=value2',
    success: function(data){eval(data);}
});
票数 10
EN

Stack Overflow用户

发布于 2011-01-13 20:29:06

下面是我的haml视图中的简单jQuery片段

代码语言:javascript
复制
:javascript

    $("#select_box_id").change(function() {
      $.post('#{target_url}?param_one='+$(this).val());
    });

希望这能有所帮助。谢谢..

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3332474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档