【问题标题】:Sinatra doesn't show POST dataSinatra 不显示 POST 数据
【发布时间】:2014-02-26 17:48:30
【问题描述】:

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

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

post数据找不到了,怎么回事?

【问题讨论】:

  • 您能否提供更多有关客户端的详细信息(构建和发出请求的行代码会很好)。如果该有效负载按原样呈现,则它看起来不像任何标准格式(例如 JSON)。您尝试使用哪种数据格式,如何设置标头,以及如何告诉 Sinatra 支持传入格式?

标签: javascript ruby ajax sinatra


【解决方案1】:

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

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

表单参数看起来像这样

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

您可以使用 request.body.read 或 rack contrib 代替 params。

机架贡献

  1. gem install rack-contrib安装它
  2. 需要它

    需要“机架”

    需要“机架/贡献”

  3. 加载它use Rack::PostBodyContentTypeParser

有了这个,你可以像往常一样使用params 来处理 json 发布数据。像这样的:

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

来源:

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 2023-03-09
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 2018-09-13
    相关资源
    最近更新 更多