在AJAX调用之后,我无法在我的视图中看到结果

时间:2015-08-27 13:51:15

标签: javascript jquery html ruby-on-rails ajax

我使用Rails 4,基本上我在我的html网页上搜索一个用jquery遍历DOM的值。我将值存储在名为 key 的变量中,我想使用此值然后发出如下所示的请求: Record.find(id: key).name

我有用户记录模型。在app/views/users目录中,我有部分_form.html.erb我正在做一些javascript。

var key = $('input#record_id').val();

我希望此变量在我的用户控制器的方法搜索中可用,以便我可以使用参数发出请求。

所以我正在做一个看起来像这样的AJAX调用:

$('#example tbody').on('click','tr', function(){
  
    var key = $(this).val();
    
    $.ajax({
      url: "/search",
      type: "POST",
      data: {
        key: key 
      },
      complete: function(){
        console.log('success');
      }
      });

});

在我的配置路由文件中,我写了这条路线:

post '/search' => 'users#search'

在我的用户控制器中,我写了这样的方法:

def search
  @record = Record.find(params[:key])
end 

然后我创建了一个search.js.erb文件,其名称与我控制器中的方法相同。在这个文件中我写道:

$('div#result').html("<%= @record.name %>");

但是当我点击我桌子的一个元素时,我的div中没有​​任何内容

我已经制作了很多console.log()来查看我的变量中的内容,并且可以确定其中有正确的值。此外,我的Ajax调用在我的控制台日志中起作用,它返回“成功”,在标签网络中,我可以看到名为search的任务,状态为“ok”。

我有错误500,但我修正了在我的方法中添加render json: 'ok' 搜索

现在我非常接近打印请求@record.name的结果,但我无法找到解决方案。

有人能给我解决方案吗?欢迎任何帮助。

1 个答案:

答案 0 :(得分:0)

控制器默认返回html的约定。在这种情况下,您似乎想要返回.js.erb部分。为此,您需要配置控制器以返回js响应。

def search
    @record = Record.find(params[:key])
    respond_to do |format|
        format.js {}
    end
end 

respond_to块中的format.js将控制器指向你的.js.erb部分。如果失败,请发布服务器输出日志的结果,我想这正在写入您在本地运行应用程序的终端/控制台。