【问题标题】:rails, request via ajax, catch a successrails,通过ajax请求,成功
【发布时间】:2026-02-17 06:35:01
【问题描述】:

我有以下内容:

<%= text_field_tag 'group_name','',:placeholder => "#{t "placeholder_group_name"}", :class => "group_name" %>

我想通过 ajax 向操作 group_name_exists 发送一个值为 'group_name' 的请求,然后呈现成功 => false 并将类 'group_name' 更改为红色。

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"}

我似乎通过输入$(this).val 错误地访问了text_field_tag 中的文本。我可以使用“group_name”类访问 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

但我总是遇到失败,这意味着我遇到了错误。虽然我发送成功 => true

【问题讨论】:

  • Rails 试图显示一个不存在的模板?您可以检查您的控制器操作是否响应 json。
  • 我知道但我不明白他为什么抱怨它,我正在渲染一个json,所以它应该是好的,不是吗?

标签: jquery ruby-on-rails ajax


【解决方案1】:

你有两个错误:

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

其次,你得到的错误是因为ajax请求默认是format.js,而不是format json,所以你的控制器正在寻找不存在的group_name_exists.js.erb。你应该回复format.js 一些东西,或者创建那个视图。

【讨论】:

  • 我试过了:format.js { render :json => { :success => false} } 它仍然在抱怨,或者如果我想赶上成功,我应该怎么回应=> false in ajax?
  • 对应的模板是否存在?错误是什么?
  • 我不需要对应的模板,因为我响应的是json格式
  • 如果我说的不起作用,请发布您的实际代码。您发布的代码应该会导致语法错误,因为您缺少end。此外,如果你正确缩进,它会容易得多。