2016-04-17 85 views
0

我希望有人可以幫我解決這個問題,並提供一個可能的解釋。我有一個名爲get_songs的rails控制器,它會從當前登錄的用戶那裏得到歌曲的哈希。也就是說,無論何時點擊某個特定的按鈕,我都想從get_songs控制器獲取數據,並將其放入JavaScript變量中。以下是我目前爲止的內容。使用Ajax請求導軌控制器數據

playlist.js.erb

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

我controlller

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' 

回答

1

如果一切工作,你會怎麼做:

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

上成功函數「響應」參數是調用您從控制器發送AJAX的結果; @songs json。

一個簡單的方法來調試你的javascript(檢查ajax請求後你'回覆'的值是什麼)是右鍵單擊你的瀏覽器,然後點擊'檢查',然後去'Sources'選項卡中,找到您的JavaScript文件,然後單擊要添加調試點的行(本例中爲'mysongs = response'),然後刷新頁面,並停止運行,並顯示'響應「。

1

我認爲概率lem在會話中。當您使用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) 
    } 
}); 

此外,請確保您有<%= csrf_meta_tag %>佈局/ application.html.erb

UPD 如果您正在使用gem 'jquery-rails' 並有//= require jquery_ujs的application.js文件 csrf_meta_tag的內容將自動添加到您的所有ajax請求中