Sinatra不显示POST数据

问题描述 投票:1回答:1

我正在从客户端向Sinatra发出AJAX请求,但不知何故数据没有显示出来.Chrome请求标头选项卡表明在客户端方面一切正常:

Request Payload 
{ test: Data }

然而,在Sinatra方面

  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"}

发布数据无处可寻,有什么不对?

javascript ruby ajax sinatra
1个回答
4
投票

这是一个常见的错误。 Sinatra只是解析表格数据(source)。

要解决这个问题,请使用rack-contribrequest.body

表单参数看起来像这样

curl -X POST 127.1:4567/ -d "foo=bar"

您可以使用request.body.read或使用rack contrib而不是params。

机架的contrib

  1. gem install rack-contrib安装它
  2. 需要它 要求'机架' 要求'rack / contrib'
  3. 加载它use Rack::PostBodyContentTypeParser

有了这个,你可以使用params正常的json post数据。像这样的东西:

curl -X POST -H "Content-Type: application/json" -d '{"payload":"xyz"}' 127.1:4567/

来源:

© www.soinside.com 2019 - 2024. All rights reserved.