JQuery не получает ответа от моего Sinatra с помощью Rack

0

Я немного боролся.

У меня есть веб-сервер 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, но я не хочу, чтобы он генерировал случайное число, которое ссылается на функцию, которую я собираюсь использовать.

Поэтому я не уверен, есть ли что-то в ответ или я что-то пропустил?

спасибо

Теги:
sinatra
rack

2 ответа

0
Лучший ответ

Я обнаружил, что проблема в том, что я пропускаю заголовок Access-Control-Allow-Origin, который действительно имеет смысл, и я забыл об этом.

Я не знал, что если у вас нет средств, чтобы вы не могли выполнить запрос X-домена, я просто использую этот драгоценный камень sinatra/cross-origin, и это будет трюк

Код:

require 'sinatra/cross_origin'

set :allow_origin, :any

configure do
  enable :cross_origin
end
0

Похоже, у вашего запроса есть опечатка в вашем вопросе ("propducts"). Убедитесь, что это не так в вашем приложении.

Также ознакомьтесь с журналами Sinatra, чтобы узнать, был ли найден маршрут, и если какие-либо элементы найдены, когда вы делаете запрос

  • 0
    Привет, не имеет значения, видите ли вы в приложении sinatra название продукта /: product / items, значит, он ищет название продукта, а не «product»

Ещё вопросы

Сообщество Overcoder
Наверх
Меню