我在搜索控制器的索引视图中有以下HTML下拉框。我想根据保管箱选择更新视图。我需要以某种方式将选择传递给控制器。
<!-- index.html rendered from Search/Index -->
<select id="search_params" name="search[params]">
<option value="tacos">tacos</option>
<option value="pizza">pizza</option>
</select>
搜索控制器代码接受参数并吐出消息
def index
query = params[:search]
msg = "Your favorite food is #{query}! OMGWTFBBQ!?!?!?!"
respond_to do |format|
format.html
format.js
end
end
这个Javascript应该以某种方式在选择时将下拉框选项发布到控制器:
$("#search_params").change(function() {
var state = $('select#search_params :selected').val();
if(state == "") state="0";
//Send the selection to the controller Search controller somehow
// and then render a new view immediately ?
//I AM NOT GOOD WITH COMPUTER
})
return false;
});
我已经看过其他几十个Rails + JQuery示例,jquery API文档等等。无法找到简单问题的答案,或者我只是在思考它。
无论如何,提前感谢您的帮助! 〜丹
答案 0 :(得分:1)
我不是Ruby / Rails的人,但我知道jQuery。
我想你想要像
这样的东西$("#search_params").change(function() {
var state = $('select#search_params :selected').val();
if(state == "") {
state="0";
}
//Call jQuery AJAX
$.ajax({
url:'/path/to/your/controller/action',
type:'POST',
data:'search=' + state,
success: function(data) {
alert(data);
},
error: function() {
alert('Stuff went wrong');
}
});
return false;
});
希望这会有所帮助,并阅读jQuery AJAX doc page。
我不确定你是如何从控制器返回数据的?是否有相应的视图呈现msg
?
答案 1 :(得分:1)
结帐jQuery.ajax()文档:http://api.jquery.com/jQuery.ajax/
您可能需要将它放在application.js的顶部(或者这可能只是Rails 2.x的要求):
// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults
jQuery.ajaxSetup({
'beforeSend': function(xhr){
xhr.setRequestHeader("Accept", "text/javascript");
var token = $("meta[name='csrf-token']").attr("content");
xhr.setRequestHeader("X-CSRF-Token", token);
}
});
我设置jQuery.ajax()以期望服务器响应中的原始javascript代码。
我的普通html模板呈现部分。或者,所有HTML都被抽象为部分HTML,而不是模板。
javascript模板将呈现基本上这样做:
$("div#some_id").html(
<%= escape_javascript(render(:partial=>'partial_name')) %>
);