[英]Why won't this POST request send a JSON string to the server?
我正在使用Sinatra。 我有一个按钮,通过发出POST请求将JSON格式的字符串发送到服务器。 唯一的问题是,JSON字符串没有到达服务器。
这是index.erb
:
<input id="post-button" type="button" value="Send POST request">
这是script.js
:
window.onload = function(){
var btn = document.getElementById('post-button');
btn.onclick = function(){
var req = new XMLHttpRequest();
var reqObj = {
name: 'Joe',
age: '100'
};
var reqJSON = JSON.stringify(reqObj);
req.open('POST','/post_target',true);
req.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
req.send(reqJSON);
}
}
最后, main.rb
:
get '/' do
erb :index
end
post '/post_target' do
p params
end
当我单击按钮并检查Firebug时,我看到浏览器发送了一个POST请求。 但是当我检查Ruby控制台时,它会为params
打印{}
。 如果它工作正常,我猜params
将以字符串形式显示JSON对象,以及它将显示的任何其他内容。
我正在我的机器上运行Sinatra,地址为http://localhost:4567
。
我究竟做错了什么? 如果我需要使用jQuery执行请求,我可以这样做,但可以使用“vanilla”JavaScript吗?
“params”最有可能寻找URL编码的查询字符串值。 你想要帖子的Body内容,而不是params。
您需要解析JSON正文:
parsed_params = JSON.parse( request.body.read, symbolize_names:true )
Alex Hill是对的。 而他提到的帖子显示了一种解决方法。
另一种方法是使用rack / contrib:
需要它:
require 'rack'
require 'rack/contrib'
添加中间件
use Rack::PostBodyContentTypeParser
来源: http : //jaywiggins.com/2010/03/using-rack-middleware-to-parse-json/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.