我正在向客户端向Sinatra提出AJAX请求,但以某种方式显示数据。ChromeRequest request Headers Tab表明,在客户端是一切正常:
Request Payload
{ test: Data }
但是,在辛纳屈的一面
post '/api/check/:name' do
sleep 3
puts params.inspect
end
和控制台:
127.0.0.1 - - [03/Feb/2014 10:45:53] "POST /api/check/name HTTP/1.1" 200 17 3.0019
{"splat"=>[], "captures"=>["name"], "name"=>"name"}
帖子数据无处可寻,怎么了?
这是一个常见的故障。Sinatra只是解析数据(来源)。
修复此使用rack-contrib
或request.body
。
表单参数看起来像这样
curl -X POST 127.1:4567/ -d "foo=bar"
而不是参数您只能使用request.body.read
或使用rack contry。
rack-contrib
- 使用
gem install rack-contrib
安装它 需要它
需要'机架'
需要'机架/贡献'
加载
use Rack::PostBodyContentTypeParser
使用此功能,您可以将params
作为JSON PORT数据的正常使用。这样的东西:
curl -X POST -H "Content-Type: application/json" -d '{"payload":"xyz"}' 127.1:4567/
来源:
- sinatra控制器参数方法在JSON POST请求中空着,
- http://jaywiggins.com/2010/03/using-rack-middlewarewareware-to-parse-json/