【问题标题】:Why don't I get a response from my Sinatra web service using $.post()?为什么我没有使用 $.post() 从我的 Sinatra Web 服务获得响应?
【发布时间】:2013-06-07 09:27:16
【问题描述】:

我正在通过 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,我不知道为什么。

有人可以解决我的问题吗?

【问题讨论】:

  • 是否有某些原因需要将其发布为 JSON?我一直发现它让事情变得更加困难。 HTTP POST 完美运行。除此之外,您是否确认路线收到了什么?例如`warn "data = #{data.inspect}" 等(或使用调试器/pry)
  • post 方法工作得很好。我正在接收 JSON 并且可以使用它。但无论是否为 JSON,我都无法发送任何响应,并且响应不需要是 JSON。
  • 您是否尝试过使用其他非 ajax/js 客户端(如 cURL)?例如curl -X POST --data 'querystring=here' http://example.org/service/task/create.

标签: javascript jquery ruby sinatra http-post


【解决方案1】:

您应该尝试的一件事是将content_type 添加到您的处理程序,以便 Sinatra 知道要向 HTTP 响应标头添加什么:

发布“/服务/任务/创建”做 内容类型:json puts '创建任务' 数据 = request.body.read jsonData = JSON.parse(数据) puts '收到 JSON:' + jsonData.to_s data.to_json 结尾

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

此外,您应该能够从curl 或使用HTTParty 的命令行工具访问该URL。发送一点 JSON,看看你会得到什么。

【讨论】:

    猜你喜欢
    • 2019-08-20
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    相关资源
    最近更新 更多