我在提交表格后无法访问Sinatra的参数。这是我的表格:
function submitForm(e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '/mix_addresses',
//grab the inputs from address_section
//data: $('.add_address_section .add_address_field').map(function() { return $(this).val() }),
data: [1,2,3],
dataType: "json",
success: function(data) {
debugger;
}
});
}
这是我的终点:
require 'sinatra'
require 'jobcoin_client'
get '/' do
erb :add_coins
end
post '/mix_addresses' do
puts params
end
我到达终点,但是参数是空白的。不应该是[1,2,3]
吗?相反,它是:
{"undefined"=>""}
任何人都能看到我做错了什么?
答案 0 :(得分:1)
这里有几个问题:)
主要问题来自Sinatra默认不处理JSON有效负载的事实。如果要发送JSON有效负载,那么最简单的解决方案是:
rack-contrib
添加到您的Gemfile require rack/contrib
use Rack::PostBodyContentTypeParser
你应该好好去!
来源:有几篇SO帖子引用此问题,例如here,here或here。
另请注意,您的请求可能存在一些问题:
key: value
格式:{ values: [1,2,3] }
data: JSON.stringify( ... )
application/json
(dataType
与服务器返回的数据相关,并且没有说明您的请求格式,见jQuery ajax documentation for more details)。最终,你应该在客户端得到类似的东西:
function submitForm(e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '/mix_addresses',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify({ values: [1,2,3] }),
success: function(data) {
debugger;
}
});
}