使用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请求中