Rack-JSONP nicht für einfache Anfragen arbeiten, sondern arbeitet für Js Anrufe in Rails 2.3

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

  •  16-09-2019
  •  | 
  •  

Frage

Ich bin mit Rails 2.3 und ich beschlossen, die Unterstützung für JSONP bereitzustellen. eine brandneue Anwendung erstellt. Dann lief Skript / generieren Gerüst Benutzername: string

Das ist meine ganze 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

Wenn ich localhost unter: 3000 / Anwender alles, was ich ein Hash bekommen. Wenn ich besuchen localhost: 3000 / users.js Rückruf = zeigen dann bekomme ich gutes Ergebnis

.

Schauen wir uns die JSONP Code . Ich verstehe nicht, warum Antwort in einem Array gewickelt wird.

Ich habe eine andere Rack-Middleware, wo ich diese Aussage ersetzt

      [status, headers, [response]]

Mit dieser Anweisung

      [status, headers, response]

Und jetzt alles funktioniert gut.

Ich weigere mich zu glauben, dass dies einen Fehler in Rack-contrib ist.

Kann mich jemand aufklären, warum Antwort in einem Array eingewickelt werden und wie könnte ich Rack-contrib in meiner Anwendung.

Der vollständige Quellcode meiner Anwendung ist hier . klonen Sie es einfach und laufen auf localhost:. 3000

War es hilfreich?

Lösung

Dieser Code ist falsch. Hier ist, was es sein sollte:

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

Es wurde Einwickeln falsch die Antwort in einem Array in dem Fall, in dem der params nicht einen Rückruf enthalten ist. Der Grund dafür braucht es die Antwort in einem Array in dem Fall zu wickeln, wo params einen Rückruf nicht enthalten ist, weil Rack-Antworten müssen auf .each reagieren ().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top