【发布时间】:2014-12-13 15:04:36
【问题描述】:
我正在使用 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 来完成吗?
【问题讨论】:
-
嗯...可能是因为您将请求的内容类型设置为 JSON,但实际上发送的是字符串?当您将请求内容类型设置为 application/x-www-form-urlencoded 时会发生什么? (免责声明:我不太确定 Sinatra 的工作原理 - 因此发布评论而不是答案)
-
不,删除内容类型在代码运行时得到相同的结果。
标签: javascript ruby ajax post sinatra