我正在使用Rails和jquery与RJS模板来执行各种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处理程序有关,但我无法弄清楚我错过了什么。
提前感谢您的帮助。
答案 0 :(得分: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文档,如果它不起作用,因为我没有测试过代码。
答案 1 :(得分:1)
HI,
我正在使用一个直接通过原型库(而不是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从我的行动中呈现出来,以引用其他一些形式元素。
希望这有帮助。
答案 2 :(得分: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"
);
});
答案 3 :(得分:0)
jQuery方法getScript是一个很好的速记,用于执行上面推荐的内容。