1

我正在使用带有 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 处理程序有关,但我无法弄清楚我缺少什么。

提前感谢您的帮助。

4

4 回答 4

5

我认为你必须告诉 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 文档。

于 2009-05-25T15:00:58.297 回答
1

你好,

我正在使用直接通过原型库(不是 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 从我的操作中渲染出来,以引用其他一些表单元素。

希望这可以帮助。

于 2009-05-25T13:32:35.087 回答
0

或者,您也可以使用您一直在使用的$.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"
    );
});
于 2010-04-09T10:28:16.253 回答
0

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

于 2010-10-18T21:20:36.327 回答