我希望有人可以帮我解决这个问题,并提供一个可能的解释。我有一个名为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'
答案 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'行,然后刷新页面。它应该在该点停止运行并显示'响应的值' ”。