微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jquery – 如何使用remote_function使用Rails 3进行Ajax调用?

我正在尝试在选择框上进行一个onchange调用。对于我的应用程序,我使用jquery.js和rails.js来使用UJS。但仍然生成代码是Prototype,而不是用于jquery ajax调用。我的代码如下所示:
<%= 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()") %>

由此产生的代码是:

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

解决方法

谢尔盖说:轨道3中没有remote_function。

解决方案是使用以下类似的操作来不引人注意地添加onchange处理程序:

$(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,例如使用以下的东西:

calculated = calculate_some_value_using(params[:selected])
render(:update) {|page|
  page << "$('#selector_for_field_to_update).html(#{calculated})"
}

在控制器中。您附加到“页面”的字符串应该是有效的javascript,如果您使用$ .ajax,将自动执行。

编辑:FYI,我们最近向jquery-ujs添加一个选择更改帮助器,所以您可以使用内置的jquery-ujs适配器现在这样做不引人注目的方式:

<%= select_tag :category_id,options_for_select(
       Category.find(:all,:data => { :remote => true,:url => url_for(:controller => "posts",:filter =>"category") } %>

尽管公平地说,添加一个选择更改事件真的不会是“不引人注目的”,因为没有任何优雅的后备用户的javascript禁用,除非您的表单不依赖于AJAX请求的结果。

原文地址:https://www.jb51.cc/jquery/181784.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐