我有以下内容:
<%= text_field_tag 'group_name','',:placeholder => "#{t "placeholder_group_name"}", :class => "group_name" %>
我想通过ajax发送一个请求,其值为&#39; group_name&#39;到一个动作group_name_exists,然后呈现成功=&gt; false并更改类&#39; group_name&#39;变红了。
AJAX:
<script>
$( function() {
$( ".group_name" ).on("onchange",function(e) {
$.ajax({
url: '<%= group_name_exists_groups_path %>',
data: {group_name: $(this).val},
success: function(response) {
if (response.key)
alert(response.key);
}
});
});
});
</script>
def group_name_exists
blabla
respond_to do |format|
format.html
logger.info "jjj #{group.as_json()}"
format.json { render :json => { :success => false} }
end
然而他告诉我以下错误:
An ActionView::MissingTemplate occurred in groups#group_name_exists:
Parameters: {"group_name"=>"undefined", "action"=>"group_name_exists", "controller"=>"groups", "locale"=>"en"}
通过输入text_field_tag
,我似乎错误地访问了$(this).val
中的文字。锄头我可以使用班级&#39; group_name&#39;来访问text_field_tag中的文字吗?
编辑:(respond_to)
<div id="content">
<script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
<script>
$( function() {
$( ".group_name" ).on("onchange",function(e) {
$.ajax({
url: '<%= group_name_exists_groups_path %>',
data: {group_name: $(this).val()},
success: function(){
alert('success');
},
error: function(){
alert('failure');
}
});
});
});
</script>
<%= text_field_tag 'group_name','',:placeholder => "#{t "placeholder_group_name"}", :class => "group_name" %>
</div>
def group_name_exists
logger.info "giveHint #{params}"
group_name = params[:group_name]
group = Group.find_by_sql("SELECT DISTINCT gk1 FROM groups WHERE gk1 = '#{group_name}';")
if group.empty?
succ = false
else
succ = true
end
respond_to do |format|
format.js { render :json => {:success => succ}}
end
end
但我总是抓住失败,这意味着我发现了一个错误。虽然我发送成功=&gt;真
答案 0 :(得分:0)
你有两个错误:
首先,val
是一个函数,因此您应该调用$(this).val()
来获取所选的选项。
其次,您收到的错误是因为默认情况下ajax请求为format.js
,而不是format json
,因此您的控制器正在寻找不存在的group_name_exists.js.erb
。您应该使用某些内容回复format.js
,或者创建该视图。