我正在开发一个rails应用程序。我有一些JS数据我发送到rails。问题是,我的ajax请求中的一个值不存在于rails'从JS到控制器的时候params
。
首先,触发它的是这个顶级
if (prospects.length > 0) {
_self.sendData(prospects);
} else {
alert('must submit more than 1 prospect');
}
该功能看起来像这样
sendData: function(prospects) {
var prospects = prospects;
var user_id = $('#user_id').val();
var team_id = $('#team_id').val();
var data = {
prospects: prospects,
user_id: user_id,
team_id: team_id
}
// data looks like (from chrome console)
// {prospects: Array(2), user_id: "950", team_id: ""}
$.ajax({
url: '/path/to/url/',
type: 'PUT',
dataType: 'json',
data: data,
success: function(data) {
console.log('success from sendData!');
console.log(data);
},
error: function(error) {
console.log('error from sendData');
console.log(error);
}
});
}
在上面的这个函数中,我看到了所有值。接下来是rails控制器
def process
p '*' * 100
p params
p '*' * 100
end
这些p
语句的输出是
" ********************************************** ************************************************** ****"
{" user_id" =>" 950"," team_id" =>""," action" = >" method_name"," controller" =>" name / of / controller"}
" ********************************************** ************************************************** ****"
如您所见,params[:prospects]
为零!我没有看到我的错误,也不知道为什么这个价值不能让它变成控制器。
有谁知道为什么params[:prospects]
不存在?
更新
我能够通过将$.ajax
数据包装在jQuery' $.param()
函数中来实现它。我的工作函数看起来像这样
sendData: function(prospects) {
var prospects = prospects;
var user_id = $('#user_id').val();
var team_id = $('#team_id').val();
var data = {
prospects: prospects,
user_id: user_id,
team_id: team_id
}
var json_data = $.param(data);
$.ajax({
url: '/path/to/url/',
type: 'PUT',
dataType: 'json',
data: json_data,
success: function(data) {
console.log('success from sendData!');
console.log(data);
},
error: function(error) {
console.log('error from sendData');
console.log(error);
}
});
}
答案 0 :(得分:0)
令人困惑的是,dataType
的{{1}}选项未设置数据对象的类型。它设置服务器响应中预期的类型。因此,您必须添加:
$.ajax
Rails会选择它并通过...
data: JSON.stringify({yada: 'yada'})
contentType: 'application/json'
...
函数为您提供您期望的内容。
我希望有所帮助。