rack jsonp non funziona per le richieste di semplici, ma funziona per .js chiamate in Rails 2.3
-
16-09-2019 - |
Domanda
Sto usando Rails 2.3 e ho deciso di fornire il supporto per JSONP. Creato un nuovo applicativo. Poi corse script / generare Nome impalcatura utente: stringa
Questa è tutta la mia 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
Quando visito localhost: 3000 / utenti tutto quello che ottiene è un hash. Quando visito localhost: 3000 / users.js callback = spettacolo allora ottengo buoni risultati
.Diamo un'occhiata alla jsonp codice . Non capisco perché la risposta viene avvolto in un array.
ho creato un altro middleware rack dove ho sostituito questa dichiarazione
[status, headers, [response]]
con questa affermazione
[status, headers, response]
E ora tutto funziona bene.
Mi rifiuto di credere che si tratta di un bug in rack contrib.
Qualcuno mi può illuminare il motivo per cui la risposta è avvolto in un array e come avrei potuto usare rack contrib nella mia applicazione.
Il codice sorgente completo della mia applicazione è qui . Basta clonarlo e correre su localhost:. 3000
Soluzione
Questo codice è sbagliato. Ecco quello che dovrebbe essere:
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
E 'stato erroneamente avvolgendo la risposta in un array nel caso in cui i params non hanno incluso un callback. Il motivo è necessario avvolgere la risposta in un array nel caso in cui params include un callback è perché risposte rack deve rispondere agli .each ().