JQuery没有得到我的Sinatra使用Rack的任何回复

时间:2014-02-19 19:18:20

标签: jquery ruby sinatra rack

我一直在挣扎。

我的Sinatra Web Server使用Rack作为中间件,因为我需要有几个Sinatra的应用程序。

应用程序将成为一个返回json响应的REST API,所以在我的Sinatra应用程序中我有类似的东西:

get "/:product/items" do
  content_type :json
  ## This will get you a JSON response 
  get_items("product")
end

如果你在浏览器中访问http:// myapp / product / items /,我将获得json响应

但是现在当我尝试从JQuery使用这个API时

jQuery.getJSON("//myapp/product/items", populate);

我在控制台日志中收到空响应

这些是标题:

Age 0
Cache-Control   public, max-age=1800
Connection  Keep-Alive
Content-Length  1443
Content-Type    application/json;charset=utf-8
Date    Wed, 19 Feb 2014 19:11:12 GMT
Server  WEBrick/1.3.1 (Ruby/2.0.0/2013-11-22)
X-Content-Digest    d55b64d8ec2c3e349fa799d3f15ae0f482850182
X-Content-Type-Options  nosniff
X-Rack-Cache    miss, store

Request Headers
Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Host    localhost:9292
Origin  http://localhost
Referer http://localhost/index.htmk
User-Agent  Mozilla/5.0 (X11; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0

如果检查标题,您会看到内容类型:json和内容长度的良好响应,但响应正文中没有任何内容。

如果我使用

Jquery.getJSON("//myapp/product_name/items?callback=?", populate)

工作......即使如此我也不想这样做因为我想将响应缓存一小时,如果我使用回调=?我得到了一个Jquery响应,但我不想这样做,因为它会生成一个随机数,引用我将要使用的函数。

所以我不确定是否有关于回复的内容或我错过了什么?

谢谢

2 个答案:

答案 0 :(得分:0)

我发现问题看起来好像我错过了Access-Control-Allow-Origin标题实际上是有意义的,我忘了它。

我不知道如果你没有办法让你无法做X域请求那么,我只是使用这个gem sinatra / cross-origin而且这将是诀窍

代码:

require 'sinatra/cross_origin'

set :allow_origin, :any

configure do
  enable :cross_origin
end

答案 1 :(得分:-1)

看起来您的请求在您的问题中有拼写错误(“propducts”) - 请检查您的应用中的情况并非如此。

另请查看您的Sinatra日志,看看路线是否被击中,以及在您提出请求时是否找到任何物品