rails,通过ajax请求,获得成功

时间:2015-01-24 20:33:25

标签: jquery ruby-on-rails ajax

我有以下内容:

<%= 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;真

1 个答案:

答案 0 :(得分:0)

你有两个错误:

首先,val是一个函数,因此您应该调用$(this).val()来获取所选的选项。

其次,您收到的错误是因为默认情况下ajax请求为format.js,而不是format json,因此您的控制器正在寻找不存在的group_name_exists.js.erb。您应该使用某些内容回复format.js,或者创建该视图。