Pregunta

ejecutar una acumulación REST API en la parte superior de Sinatra. Ahora quiero escribir un script de jQuery que recupera los datos de la API.

Sinatra se le dice que la respuesta de JSON

before do
  content_type :json
end

Un simple apariencia de ruta como

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

Mi jQuery guión es un simple ajax-llamada

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

En realidad todo funciona bien siempre y cuando ambos se ejecuta en la misma IP, API y solicitando JS. Ya he probado a jugar con JSONP para rack sin ningún resultado positivo, sin embargo. Probablemente sólo necesito un indicio de cómo proceder.

¿Fue útil?

Solución

JSONP (JSON con relleno). Hay una JSONP extensión para rack .

Básicamente, se llamará:

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

que se traduce en una petición como:

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

y el servidor responderá, por ejemplo:.

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

Por supuesto, los clientes pueden hacer pedidos JSONP sin jQuery. El truco con JSONP está usted sirve guiones, que puede ser de varios dominios, en lugar de JSON pura, con no.

Otros consejos

Gracias de las respuestas hasta ahora. Tenías razón y jsonp resolvería el problema. La fragmentos de código para el trabajo fino Javascript. Para configurar Sinatra es muy fácil, ya que es la acumulación en la parte superior del rack. Por lo tanto, basta con instalar la gema rack contrib

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

(o ponerlo en su Gemfile) y añadir

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

para su aplicación.

Este middleware proporciona JSON regular a los clientes-JSONP no y JSONP a jQuery & co.

Podría ser interesante para usted http://github.com/shtirlic/sinatra-jsonp - esta extensión añade funcionalidad que falta a Sinatra

También disponible como gem install sinatra-jsonp joya

Trate de llamar

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

En esta palabra clave principal de la muestra es la construcción de "devolución de llamada =?", Por lo que necesita para procesar este parámetro en el script del lado del servidor, y hacer una JSONP válida, como esto:

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

Donde "función" es datos aleatorios, que se genera por jQuery automáticamente. Más aquí sobre jQuery y entre dominios JSONP.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top