rack jsonp ne fonctionne pas pour les demandes simples mais fonctionne pour les appels .js dans Rails 2.3

StackOverflow https://stackoverflow.com/questions/1133244

  •  16-09-2019
  •  | 
  •  

Question

J'utilise Rails 2.3 et j'ai décidé de fournir un soutien pour JSONP. Créé une toute nouvelle application. Puis a couru script / générer Nom échafaudage utilisateur: string

Ceci est mon ensemble environment.rb

RAILS_GEM_VERSION = '2.3.2' unless defined? RAILS_GEM_VERSION
require File.join(File.dirname(__FILE__), 'boot')
require 'rack/contrib'
Rails::Initializer.run do |config|
 config.middleware.use 'Rack::JSONP'
end

Quand je visite localhost: 3000 / utilisateurs tout ce que je reçois est un hachage. Lorsque je visite localhost: 3000 / users.js rappel = émission puis-je obtenir un bon résultat

.

Regardons jsonp Code . Je ne comprends pas pourquoi la réponse est enveloppée dans un tableau.

J'ai créé un autre middleware Rack où je l'ai remplacé cette déclaration

      [status, headers, [response]]

avec cette déclaration

      [status, headers, response]

Et maintenant tout fonctionne bien.

Je refuse de croire que ce bogue dans rack contrib.

Quelqu'un peut-il me éclairer pourquoi la réponse est enveloppé dans un tableau et comment pourrais-je utiliser en rack contrib dans mon application.

Le code source de ma demande est ici . Il suffit de cloner et exécuter sur localhost. 3000

Était-ce utile?

La solution

Ce code est erroné. Voici ce qu'il devrait être:

def call(env)
  status, headers, response = @app.call(env)
  request = Rack::Request.new(env)
  if request.params.include?('callback')
    response = [pad(request.params.delete('callback'), response)]
    headers['Content-Length'] = response.length.to_s
  end
  [status, headers, response]
end

Il enveloppait de manière incorrecte la réponse dans un tableau dans le cas où les params ne comprennent pas un rappel. La raison pour laquelle il a besoin d'envelopper la réponse dans un tableau dans le cas où params inclut un rappel parce que les réponses de rack doivent répondre à .Chaque ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top