JSONP con Rails
-
19-09-2019 - |
Domanda
Sto cercando di recuperare i dati JSON da un sito remoto con Rails / Prototipo.
ho scoperto che c'è un ramo di Prototype che ha una funzione Ajax.JSONRequest()
. Non riesco a far funzionare tutto questo.
jQuery ha una funzione $.getJSON()
, ma sto usando alcune funzioni per prototipi e preferisco non passare a jQuery o utilizzare alcuna modalità conflitti.
Che cosa mi manca? Sembra che questo sarebbe fatto facilmente con Rails o prototipo.
Soluzione
Avete bisogno di utilizzare Rails aiutanti per fare la richiesta del client JSON? È facile con Prototipo
new Ajax.Request('/some_url', {
method:'get',
onSuccess: function(transport){
var json = transport.responseText.evalJSON();
}
});
Hai solo bisogno di fare in modo che / some_url risponde con JSON a un XHTTPRequest (preferibilmente utilizzando respond_to ?, ma si può anche controllare request.xhr?), Utilizzando il metodo Object # to_json Rails.
Altri suggerimenti
È inoltre possibile utilizzare il middlware cremagliera JSONP che è disponibile in rack contrib. Questo ti dà la possibilità di aggiungere solo & callback = metodo per la stringa di query e avere la risposta da rotaie avvolti nel vostro metodo di callback.
Basta aggiungere questo alla tua application.rb:
require "rack/contrib/jsonp"
class Application < Rails::Application
config.middleware.use Rack::JSONP
end
nulla di costruito nelle guide appositamente per jsonp, ma ci sono un paio di cose che si potrebbero fare se si voleva le vostre rotaie app di bel gioco con jsonp.
- creare un jsonp mime-type in config / inizializzatori / mime_types.rb
- estendere oggetto con un metodo to_jsonp che vi avvolgerà chiamate a JSON nel callback passato. qualcosa di simile:
def to_jsonp (richiamata, opzioni = {}) "# {Callback} (# {self.to_json (opzioni)})" end
- seguire questo articolo ragazzi.
http://blogs.sitepoint.com / 2006/10/05 / jSON-p-uscita-con-rails /