Вопрос

Я управляю постройкой Rest-API на вершине Синатры. Теперь я хочу написать сценарий jQuery, который получает данные из API.

Синатре говорят ответить с JSON

before do
  content_type :json
end

Простой маршрут выглядит как

get '/posts' do
  Post.find.to_json
end

Мой сценарий jQuery-это простой

$.ajax({
  type: 'get',
  url: 'http://api.com/posts',
  dataType: 'json',
  success: function(data) {
     // do something
  }
})

На самом деле все работает нормально до тех пор, пока оба работают по одному IP, API и запрашиванию JS. Я уже пытался поиграть с JSONP для стойки без каких -либо положительных результатов. Наверное, мне просто нужен намек на то, как продолжить.

Это было полезно?

Решение

Использовать Jsonp (JSON с прокладкой). Eсть JSONP расширение для стойки.

По сути, вы позвоните:

$.ajax({
  type: 'get',
  url: 'http://api.com/posts',
  dataType: 'jsonp',
  success: function(data) {
     // do something
  }
})

который переводится на запрос, такой как:

http://api.com/posts?callback=someJSFunc

и ваш сервер ответит, например:

someJSFunc({"json":"obj"});

Конечно, клиенты могут выполнять запросы JSONP без jQuery. Хитрость с JSONP заключается в том, что вы подаете сценарии, которые могут быть междоменными, а не чистыми JSON, с невозможно.

Другие советы

Спасибо за ответы до сих пор. Вы были правы, и JSONP решит проблему. Фрагменты кода для JavaScript работают нормально. Установить Sinatra очень просто, так как он строится на вершине стойки. Поэтому просто установите драгоценный камень контрибов

 gem install rack-rack-contrib --source=http://gems.github.com/

(или положите в свой драгоценный камень) и добавьте

require 'rack/contrib/jsonp'
use Rack::JSONP

к вашему заявлению.

Это промежуточное программное обеспечение предоставляет регулярные JSON для клиентов Non-JSONP и JSONP для JQUERY & CO.

Это может быть интересно для вас http://github.com/shtirlic/sinatra-jsonp - Это расширение добавляет отсутствующую функциональность к Синатре

Также доступен в качестве драгоценного камня gem install sinatra-jsonp

Попробуй позвонить

$.getJSON("http://example.com/?callback=?",function(data) { alert(data); });

В этом примере основное ключевое слово-это конструкция «callback =?», Поэтому вам нужно обработать этот параметр в своем скрипте на стороне сервера и сделать действительный JSONP, например:

function({ "foo" : "bar" });

Где «функция» представляет собой случайные данные, которые генерируются JQuery автоматически. Читать далее здесь О jQuery и Cross-Domain JSONP.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top