rack jsonp non funziona per le richieste di semplici, ma funziona per .js chiamate in Rails 2.3

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

  •  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

È stato utile?

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 ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top