rack jsonp que no trabaja para solicitudes simples pero que funciona para llamadas .js en Rails 2.3

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

  •  16-09-2019
  •  | 
  •  

Pregunta

Estoy usando Rails 2.3 y decidí dar apoyo a JSONP. Creado una nueva aplicación. Entonces corrió script / generar nombre de usuario andamio: cadena

Esta es toda mi 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

Cuando visito localhost: 3000 / usuarios todo lo que consigo es un hash. Cuando visito localhost: 3000 / users.js devolución de llamada = mostrar entonces consigo buen resultado

.

Veamos el jsonp código. No entiendo por qué la respuesta está siendo envuelto en una matriz.

He creado otra Rack middleware en el que sustituye esta declaración

      [status, headers, [response]]

con esta declaración

      [status, headers, response]

Y ahora todo está funcionando bien.

Me niego a creer que esto es un error en rack contrib.

Puede alguien me ilumine la razón por la respuesta está siendo envuelto en una matriz y cómo podría utilizar en rack contrib en mi solicitud.

El código fuente completo de mi solicitud es aquí . Sólo clonarlo y ejecutar en el servidor local:. 3000

¿Fue útil?

Solución

Este código es incorrecto. Esto es lo que debe ser:

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

Se envolver incorrectamente la respuesta en una matriz en el caso en que los params no incluían una devolución de llamada. La razón por la que necesita para envolver la respuesta de una matriz en el caso en params sí incluye una devolución de llamada se debe a que las respuestas bastidor debe responder a .Cada ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top