【发布时间】:2013-07-30 05:54:35
【问题描述】:
我有一条如下所示的 Sinatra 路线:
post '/participants/create' do
puts request.body.read
end
我正在使用 jQuery POST 来实现它:
javascript:
$('#contact').on('submit',function () {
$.ajax({
url: 'participants/create',
dataType: 'json',
contentType: 'application/json',
type: 'POST',
data : JSON.stringify({ name: "Dom"}),
success: function(json) {
alert('all done');
}
})
})
无论出于何种原因,正文始终为空,并且 request.content-type 始终为application/x-www-form-urlencoded。很困惑。
【问题讨论】:
-
您是否阻止了表单提交?
-
嗯……好问题。我需要使用 preventDefaults 不是吗?
-
在处理程序的主体中尝试
p params。 Sinatra 有时会做一些奇怪的参数处理。 -
Dominic,试试
function(event) {...event.preventDefault()。此外,Sinatra 可以为您将 POST 数据放入params对象/助手中,无需阅读请求正文。也看看jquery-json,我听说过它的好消息。最后,尝试使用halt 200, params.inspect而不是puts回复...。