Ruby on rails 将数据从Ajax传递到Rails控制器

Ruby on rails 将数据从Ajax传递到Rails控制器,ruby-on-rails,ruby,ajax,Ruby On Rails,Ruby,Ajax,我的rails应用程序有点问题。 我试图从数组中提取一个随机名称,并将其传递到rails控制器和方法中 这是我的AJAX: var artists = [array with some names] randomA = {} var randomArtist = artists[Math.floor(Math.random()*artists.length)]; randomA['a_name'] = randomArtist.toString(); $.ajax({ url: "

我的rails应用程序有点问题。 我试图从数组中提取一个随机名称,并将其传递到rails控制器和方法中

这是我的AJAX:

var artists = [array with some names]
randomA = {}

var randomArtist = artists[Math.floor(Math.random()*artists.length)];

randomA['a_name'] = randomArtist.toString();

$.ajax({
    url: "/songs_echowrap/" + randomA.a_name,
    dataType: "json"
    }).success(function(data) { 
        Do Stuff   
    }


    });  
});
以下是我的路线:

get 'songs_echowrap/:artist_name' => 'users#get_echonest'
这是我的控制器:

def get_echonest 

    foo = params[:artist_name]

    @rec = Echowrap.playlist_basic(:artist => params[:artist_name] , :results => 25)

    render json: @rec

end

在终端中运行binding.pry时,参数“未定义”

在ajax调用中,您应该指定方法(在本例中,看起来像GET)和所需的数据:

$.ajax({
  type: "GET", 
  url: "/songs_echowrap/" + randomA.a_name,
  data: randomA.a_name,
  }).success(function(data) { 
    Do Stuff   
}
});  
});
在ajax中这样做

$.ajax({
  type: "GET",
  url: "/songs_echowrap?artist_name=" + randomA.a_name,
  datavalue: 'html',
  }).success(function(data) { 
    Do Stuff 
  }
 });
});
在路线上,

get 'songs_echowrap' => 'users#get_echonest'
在控制器中

def get_echonest
  foo = params[:artist_name]
  @rec = Echowrap.playlist_basic(:artist => params[:artist_name] , :results => 25)
  render json: @rec
end
试试这个: 对您的代码进行小的更改,可以在
ajax调用中添加
data
variable,如下所示:

var artists = [array with some names]
randomA = {}

var randomArtist = artists[Math.floor(Math.random()*artists.length)];

randomA['a_name'] = randomArtist.toString();

$.ajax({
    url: "/songs_echowrap/" + randomA.a_name,
    dataType: "json",
    data: {artist_name: randomA.a_name }
    }).success(function(data) { 
        Do Stuff   
    }


    });  
});

对不起,我对Javascript比较陌生,我应该更清楚我的代码

我意识到我的一个变量在错误的范围内,所以它一直以未定义的形式返回。 我提出了两个AJAX请求,我想我可以从第一个请求返回值并将其传递给第二个请求。这个问题帮助我理解了我的问题:

这是我现在的javascript:

$('span').on('click', function(){
    $('#s_title').empty();
    $("#playlist_title").empty();
    $("#viito_list").empty();

    var p_title = $(this).html();
    $("#playlist_title").append(p_title);

    var id = $(this).data("id");
    var artistsList = []

    $.ajax({
        url: "/songs/"+id,
        dataType: "json",
        success: successCallback
    })

    function successCallback(data){
        for(var i = 0; i < data.length; i++){
                function msToTime(duration) {
                    var seconds = parseInt((duration/1000)%60),
                        minutes = parseInt((duration/(1000*60))%60)
                    minutes = (minutes < 10) ? "0" + minutes : minutes;
                    seconds = (seconds < 10) ? "0" + seconds : seconds;

                    return minutes + ":" + seconds ;
                }

            artistsList.push(data[i].artists[0].name);

            $("#s_title").append("<tr> <td>" + data[i].name + "</td>" + "<td>" + data[i].artists[0].name + "</td>" + "<td>" + msToTime(data[i].duration_ms) + "</td>" + "<td><span class='glyphicon glyphicon-remove song-select'></span>" + "</td> </tr>")
        }

        randomArtist = artistsList[Math.floor(Math.random()*artistsList.length)];
        getWeird(randomArtist)
    }


    function getWeird(rando){

        $.ajax({
        type: "GET",
        url: "/songs_echowrap?artist_name=" + rando,
        dataType: "json"
                }).success(function(data) {
                  $("viito_list").empty();

                  for(var i = 0; i < data.length; i++){

                    $("#viito_list").append("<tr> <td>" + data[i].title + "</td>" + "<td>" + data[i].artist_name + "</td> </tr>")
                  }


                });
    }


}); 
$('span')。在('click',function()上{
$('s#u title')。空();
$(“#播放列表_标题”).empty();
$(“#viito_列表”).empty();
var p_title=$(this.html();
$(“#播放列表_标题”)。附加(p#标题);
var id=$(this.data(“id”);
var artistsList=[]
$.ajax({
url:“/songs/”+id,
数据类型:“json”,
success:successCallback
})
函数成功回调(数据){
对于(变量i=0;i
您是否在浏览器中对此进行了测试?你为什么要这么做?在dev工具中查看请求参数。在控制器操作中引发参数散列,查看参数是否包含艺术家名称。@Mohamad是的,我已经完成了一个console.log(randomA.a_name),它确实返回了一个我想要的随机艺术家名称。但我认为它没有正确到达控制器。在终端中,当我运行binding.pry时,“foo”等于“undefined”,而不是
console.log()
检查Rails请求。在控制器操作中引发错误,并检查开发工具以查看请求响应中引发的参数散列。您将确切地看到
params
包含的内容。如果这是你的JavaScript或其他东西,你就不会知道了。哦,我还以为我误解了你的答案呢。即使我把它放回去,参数在我的控制器中仍然是未定义的。使用我建议的解决方案,params[:data]可以得到什么?params[:data]返回nil