使用Ajax请求rails控制器数据

我希望有人可以帮我解决这个问题,并提供一个可能的解释。 我有一个名为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  @songs} end end 

我的路线:

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

如果一切正常,你会做:

 success : function(response) { mysongs = response; } 

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

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

我认为会议有问题。 当您使用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 %>

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