Я немного боролся.
У меня есть веб-сервер Sinatra с использованием Rack в качестве промежуточного программного обеспечения, так как мне нужно иметь несколько приложений Sinatra.
Приложение будет REST API, который возвращает ответ json, поэтому в моем приложении Sinatra у меня есть что-то вроде:
get "/:product/items" do
content_type :json
## This will get you a JSON response
get_items("product")
end
Если вы перейдете к http://myapp/product/items/в браузере, я получу ответ json
но теперь, когда я пытаюсь использовать этот api из JQuery
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
Если вы проверите заголовки, вы увидите хороший ответ с содержимым-Type: json и длиной содержимого, но в теле ответа ничего нет.
Если я использую
Jquery.getJSON("//myapp/product_name/items?callback=?", populate)
Работы... даже если я не хочу этого делать, потому что я хочу кэшировать ответ в течение часа, если я использую callback =? Я получаю ответ JQuery, но я не хочу, чтобы он генерировал случайное число, которое ссылается на функцию, которую я собираюсь использовать.
Поэтому я не уверен, есть ли что-то в ответ или я что-то пропустил?
спасибо
Я обнаружил, что проблема в том, что я пропускаю заголовок Access-Control-Allow-Origin, который действительно имеет смысл, и я забыл об этом.
Я не знал, что если у вас нет средств, чтобы вы не могли выполнить запрос X-домена, я просто использую этот драгоценный камень sinatra/cross-origin, и это будет трюк
Код:
require 'sinatra/cross_origin'
set :allow_origin, :any
configure do
enable :cross_origin
end
Похоже, у вашего запроса есть опечатка в вашем вопросе ("propducts"). Убедитесь, что это не так в вашем приложении.
Также ознакомьтесь с журналами Sinatra, чтобы узнать, был ли найден маршрут, и если какие-либо элементы найдены, когда вы делаете запрос