使用Ajax请求rails控制器数据

时间:2016-04-17 23:25:20

标签: javascript jquery ruby-on-rails ajax

我希望有人可以帮我解决这个问题,并提供一个可能的解释。我有一个名为get_songs的rails控制器,它将获取当前登录用户的歌曲哈希值。也就是说,无论何时单击某个特定按钮,我都希望将get_songs控制器中的数据放入javascript变量中。以下是我到目前为止的情况。

playlist.js.erb

   function get_songs() {
 var mysongs;
 $.ajax({
    type : 'GET',
    url : "getSongs",
    dataType : 'json',
    success : function(response) {
    }
  });
}

我的控制者

class StaticPagesController < ApplicationController


  respond_to :js, :json, :html

 def get_songs()
      if user_signed_in?
            session[:user_id] = current_user.id
            present_user = User.find(session[:user_id])
            present_user = present_user.playlist.keys
        @songs = present_user
    respond_to do |format|
  format.json  { render :json => @songs}

    end
    end

我的路线:

  match '/getSongs', to: 'static_pages#get_songs', via: 'get'

2 个答案:

答案 0 :(得分:1)

我认为会话中的问题。当您使用ajax发送请求时,您不会发送任何cookie和会话。所以试试这个

$.ajax({
  type:"GET",
  beforeSend: function (request){
    //your token is here
    request.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr("content"));
  },
  url: "getSongs",
  dataType : 'json',
  success : function(response) {
    console.log(response)
  }
});

此外,请确保 layouts / application.html.erb

中有<%= csrf_meta_tag %> {/ 1}}

<强> UPD 如果您使用gem 'jquery-rails' 并在 application.js 文件中包含//= require jquery_ujs csrf_meta_tag的内容会自动添加到您的所有ajax请求中

答案 1 :(得分:1)

如果一切正常,你会这样做:

outputRejectLevels

成功函数的'response'参数是您从控制器发送的ajax调用的结果; @songs json。

调试javascript的简单方法(检查ajax请求后'响应'的值)是右键单击浏览器并单击“检查”,然后转到“来源”选项卡,查找您的javascript文件,然后单击要添加调试点的行(在本例中为'mysongs = response'行,然后刷新页面。它应该在该点停止运行并显示'响应的值' ”。