【问题标题】:Running a rails RJS template from a jquery get request从 jquery get 请求运行 rails RJS 模板
【发布时间】:2010-10-28 17:50:41
【问题描述】:

我正在使用带有 RJS 模板的 Rails 和 jquery 来执行各种 AJAX 请求。

对于我的大多数 Ajax 内容,我将提交处理程序附加到 application.js 中的表单,如下所示:

$('#tagging_flickr_photos').submitWithAjax();
$('#tag_submit').click(function() {
    $('#flickr-photos-status').show();

});

这会调用执行一些处理然后转发到 RJS 模板的表单操作,如下所示:

$("#flickr-photos-status").hide();
$("#flickr-photos").fadeIn();
$("#flickr-photos").html("<%= escape_javascript(render(:partial => 'flickr_photos_for_tagging_content')) %>");

这是一种享受。

现在我正在尝试做同样的事情,但只是基于在下拉列表中选择不同的值而不是提交表单。 这是我将处理程序附加到下拉列表的 javascript:

$('#film_film_name_id').change(function() {
    $.get('/admin_film/make_tags?film_name_id=' + $("#film_film_name_id").val() + '&film_speed_id=' + $("#film_film_speed_id").val());
});

我的控制器方法做了一些处理然后转发到 RJS 模板 (make_tags.js.erb):

$("#film_tags").val(<%=@tags%>)

但是,模板似乎没有执行。 我可以在我的日志中看到它正在调用我的方法并呈现模板的条目,但无论我在模板中放入什么,似乎都没有发生任何事情。 我在其中放了一个 Javascript 警报,但它没有触发。

我认为问题与附加我的 Javascript 处理程序有关,但我无法弄清楚我缺少什么。

提前感谢您的帮助。

【问题讨论】:

    标签: jquery ruby-on-rails ruby rjs


    【解决方案1】:

    我认为你必须告诉 jQuery 你期待 JavaScript 并且它应该被执行。尝试以下方法,看看是否有效:

    $('#film_film_name_id').change(function() {
      var url = '/admin_film/make_tags?film_name_id=' + $("#film_film_name_id").val() + '&film_speed_id=' + $("#film_film_speed_id").val()
      $.ajax({
        type: 'GET',
        dataType: 'script',
        url: url
      });
    });
    

    如果由于我没有测试代码而不起作用,请检查 jQuery.ajax() 上的 jQuery 文档。

    【讨论】:

    • 谢谢!我已经为此奋斗了几个小时了。
    【解决方案2】:

    嗨,

    我正在使用直接通过原型库(不是 jquery)调用的观察者

            <td><div id="outconditionnals_container">
                    <% if !@milestone.howto.conditionnals.nil? then %>
                            <%= collection_select(:OUTconditionnal, :id, @milestone.howto.conditionnals, :id, :name, {:prompt => true}, {"index" => @outconditionnalID.to_s}) %>
                            <%= observe_field("OUTconditionnal_"+@outconditionnalID.to_s+"_id",
                                    :url => { :action => :AJAX_selection_change },
                                    :with => "'id='+value+'&dir=out&type=conditionnal&milestoneID="+@milestone.id.to_s+"'",
                                    :on => "changed")%>                         
                    <% end %>
                </div>
            </td>
    

    然后我的 rjs 从我的操作中渲染出来以引用其他一些表单元素。

    希望这会有所帮助。

    【讨论】:

    • 谢谢 - 另一个答案对我有用,但我会在有机会时阅读观察者的资料,因为它看起来很有用。
    【解决方案3】:

    或者,您也可以使用您一直在使用的 $.get
    这是你的发型示例:

    $('#film_film_name_id').change(function() {
        $.get(
          '/admin_film/make_tags', // or something like '<%= make_tags_admin_film_path %>'
          {
            film_name_id: $("#film_film_name_id").val(),
            film_speed_id: $("#film_film_speed_id").val()
          },
          null, // you may define an additional callback here, if that makes sense
          "script"
        );
    });
    

    【讨论】:

      【解决方案4】:

      jQuery 方法 getScript 是执行 ujh 上面推荐的一个很好的简写。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-18
        • 2013-03-08
        • 1970-01-01
        • 1970-01-01
        • 2013-12-05
        相关资源
        最近更新 更多