RACK-JSONP는 간단한 요청을 위해 작동하지 않지만 Rails 2.3에서 .js 호출에 대해 작동합니다.
-
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 ()에 응답해야하기 때문입니다.
제휴하지 않습니다 StackOverflow