我一直在挣扎。
我的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响应,但我不想这样做,因为它会生成一个随机数,引用我将要使用的函数。
所以我不确定是否有关于回复的内容或我错过了什么?
谢谢
答案 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日志,看看路线是否被击中,以及在您提出请求时是否找到任何物品