Reputation: 5921
I am making AJAX request from the client to Sinatra but somehow the data doesn't show up.Chrome request headers tab suggests that on the client side is everything OK:
Request Payload
{ test: Data }
However, on Sinatra's side
post '/api/check/:name' do
sleep 3
puts params.inspect
end
And the console:
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 data is nowhere to be found, what's wrong ?
Upvotes: 1
Views: 2499
Reputation: 4330
It's a common fault. Sinatra just parse form data (source).
To fix this use rack-contrib
or the request.body
.
Form parameter would look like this
curl -X POST 127.1:4567/ -d "foo=bar"
Instead of params you can just use request.body.read
or use rack contrib.
rack-contrib
gem install rack-contrib
Require it
require 'rack'
require 'rack/contrib'
Load it use Rack::PostBodyContentTypeParser
With this you can use params
as normal for json post data. Something like this:
curl -X POST -H "Content-Type: application/json" -d '{"payload":"xyz"}' 127.1:4567/
Source for this:
Upvotes: 4