rack jsonp não trabalhar para pedidos simples, mas funciona para chamadas .js em Rails 2.3

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

  •  16-09-2019
  •  | 
  •  

Pergunta

Eu estou usando Rails 2.3 e eu decidi fornecer suporte para JSONP. Criou um aplicativo novo. Em seguida, correu script / gerar nome de usuário andaime: string

Esta é toda a minha 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 eu visito localhost: 3000 / usuários tudo que eu vejo é um hash. Quando eu visito localhost:?. 3000 / users.js callback = mostrar então eu obter um bom resultado

Vamos olhar o jsonp código. Eu não entendo por que a resposta está sendo enrolada em uma matriz.

Eu criei outro middleware rack onde eu substituído esta declaração

      [status, headers, [response]]

com esta declaração

      [status, headers, response]

E bem agora tudo está funcionando.

Eu me recuso a acreditar que este é um bug no rack de contrib.

Alguém pode me esclarecer por que a resposta está sendo envolvido em um array e como eu poderia usar em rack contrib em meu aplicativo.

O código fonte completo da minha candidatura é aqui . Apenas clone ele e executado em localhost:. 3000

Foi útil?

Solução

Esse código é errado. Aqui está o que deve 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

Foi incorrectamente envolvendo a resposta em uma matriz, no caso em que os parâmetros não incluem uma chamada de retorno. A razão precisa colocar a resposta em uma matriz no caso em que params não inclui uma chamada de retorno é porque as respostas da cremalheira deve responder a .each ().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top