为什么我没有使用$ .post()从我的Sinatra Web服务获得响应?

时间:2013-06-07 09:27:16

标签: javascript jquery ruby sinatra http-post

我通过Ajax将JSON发送到Sinatra Web服务,但我没有得到任何响应。

这是请求:

$.post('http://url:port/service/task/create',JSON.stringify(sendData),function(data){
    alert('success!' + data);});

Sinatra网络服务是:

post '/service/task/create' do

  puts 'create task'

  data = request.body.read
  jsonData = JSON.parse(data)
  puts 'received JSON: ' + jsonData.to_s

  data.to_json

end

我也尝试过:

json data

但没有任何作用。

我验证了服务收到请求,Firebug告诉我请求以“200 OK”终止,但答案是空的。

使用纯JavaScript Ajax调用我看到状态总是0,我不知道为什么。

有没有人能解决我的问题?

1 个答案:

答案 0 :(得分:1)

您应该尝试的一件事是向您的处理程序添加content_type,因此Sinatra知道要添加到HTTP响应标头的内容:

post '/service/task/create' do

  content_type :json

  puts 'create task'

  data = request.body.read
  jsonData = JSON.parse(data)
  puts 'received JSON: ' + jsonData.to_s

  data.to_json

end

如果您需要/需要,可以使用'application/json'代替:json

此外,您应该可以从curl或使用HTTParty的命令行工具点击该网址。发送一些JSON,看看你得到了什么。