在表单提交时使用 sinatra 检索参数。参数未定义
Retrieving params with sinatra on form submit. Params is undefined
我在提交表单后无法访问 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"=>""}
有人看到我做错了什么吗?
这里有几个问题:)
Sinatra 配置
主要问题是 Sinatra 默认不处理 JSON 负载。如果你想发送 JSON 负载,那么最简单的解决方案是:
- 要将
rack-contrib
添加到您的 Gemfile,
- 然后,在您的 sinatra 应用程序中要求它:
require rack/contrib
- 并加载处理这个问题的中间件:
use Rack::PostBodyContentTypeParser
你应该可以开始了!
来源:几个 SO post 参考这个问题,例如 here, here or here。
jQueryajax来电
另请注意,您的请求可能存在一些问题:
- 您需要为 JSON 负载使用
key: value
格式:{ values: [1,2,3] }
- 您需要在发送之前将您的 JSON 有效负载字符串化:
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;
}
});
}
我在提交表单后无法访问 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"=>""}
有人看到我做错了什么吗?
这里有几个问题:)
Sinatra 配置
主要问题是 Sinatra 默认不处理 JSON 负载。如果你想发送 JSON 负载,那么最简单的解决方案是:
- 要将
rack-contrib
添加到您的 Gemfile, - 然后,在您的 sinatra 应用程序中要求它:
require rack/contrib
- 并加载处理这个问题的中间件:
use Rack::PostBodyContentTypeParser
你应该可以开始了!
来源:几个 SO post 参考这个问题,例如 here, here or here。
jQueryajax来电
另请注意,您的请求可能存在一些问题:
- 您需要为 JSON 负载使用
key: value
格式:{ values: [1,2,3] }
- 您需要在发送之前将您的 JSON 有效负载字符串化:
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;
}
});
}