RACK-JSONP는 간단한 요청을 위해 작동하지 않지만 Rails 2.3에서 .js 호출에 대해 작동합니다.

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

  •  16-09-2019
  •  | 
  •  

문제

나는 Rails 2.3을 사용하고 있으며 JSONP를 지원하기로 결정했습니다. 새로운 응용 프로그램을 만들었습니다. 그런 다음 스크립트를 실행/스캐 폴드 사용자 이름 생성 : 문자열

이것이 나의 전체 환경입니다

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

LocalHost : 3000/사용자를 방문하면 해시 만 있습니다. localhost : 3000/users.js? callback = show를 방문하면 좋은 결과를 얻습니다.

보자 JSONP 코드 . 나는 왜 응답이 배열에 싸여 있는지 이해하지 못한다.

이 문장을 대체 한 다른 랙 미들웨어를 만들었습니다.

      [status, headers, [response]]

이 진술로

      [status, headers, response]

그리고 이제 모든 것이 잘 작동합니다.

나는 이것이 랙-컨트립의 버그라고 믿기를 거부합니다.

누군가가 왜 응답이 배열에 싸여 있는지, 그리고 내 응용 프로그램에서 랙-콘트립을 어떻게 사용할 수 있습니까?

내 응용 프로그램의 전체 소스 코드 여기에. 그냥 복제하고 LocalHost : 3000에서 실행하십시오.

도움이 되었습니까?

해결책

그 코드는 잘못되었습니다. 다음은 다음과 같습니다.

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

매개 변수에 콜백이 포함되어 있지 않은 경우 배열에서 응답을 잘못 포장했습니다. 콜백이 포함 된 경우 배열에서 응답을 랩핑 해야하는 이유는 랙 응답이 .Each ()에 응답해야하기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top