JSONP avec Rails
-
19-09-2019 - |
Question
Je suis en train de récupérer des données JSON à partir d'un site distant avec Rails / Prototype.
J'ai trouvé qu'il ya une branche de Prototype qui a une fonction Ajax.JSONRequest()
. Je ne peux pas obtenir ce travail.
jQuery a une fonction $.getJSON()
, mais je suis en utilisant des fonctions de Prototype et je préfère ne pas passer à jQuery ou ne pas utiliser le mode de conflit.
Qu'est-ce que je manque? Il semble que ce serait facile à faire avec Rails ou Prototype.
La solution
Avez-vous besoin d'utiliser les aides Rails pour faire la demande du client JSON? Il est facile avec Prototype
new Ajax.Request('/some_url', {
method:'get',
onSuccess: function(transport){
var json = transport.responseText.evalJSON();
}
});
Vous devez juste vous assurer que / some_url répond avec JSON à un XHTTPRequest (de préférence en utilisant respond_to ?, mais vous pouvez également vérifier request.xhr?), En utilisant la méthode Object # Rails de to_json.
Autres conseils
Vous pouvez également utiliser la middlware rack JSONP qui est disponible dans le rack-contrib. Cela vous donne la possibilité de simplement ajouter & rappel = méthode à votre chaîne de requête et ont la réponse de rails enveloppés dans votre méthode de rappel.
Il suffit d'ajouter ceci à votre application.rb:
require "rack/contrib/jsonp"
class Application < Rails::Application
config.middleware.use Rack::JSONP
end
rien construit dans les rails spécifiquement pour jsonp, mais il y a une ou deux choses que vous pourriez faire si vous voulez vos rails app pour jouer agréable avec jsonp.
- créer un type MIME-jsonp dans config / initializers / mime_types.rb
- étendre objet avec une méthode de to_jsonp qui envelopper les appels à JSON dans votre rappel passé. quelque chose comme:
def to_jsonp (rappel, options = {}) "# {} Rappel (# {self.to_json (options)})" fin
- suivre cet article gars.
http://blogs.sitepoint.com / 2006/10/05 / JSON-p-sortie-avec-rails /