ラックJSONPは、単純な要求のために働くが、Railsの2.3での.js通話のために働くいません
-
16-09-2019 - |
質問
私はRailsの2.3を使用していると私はJSONPのサポートを提供することを決めました。ブランドの新しいアプリケーションを作成しました。文字列
:その後、スクリプトを実行した/足場ユーザー名を生成これは私の全体の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
私はlocalhostを訪問すると、:3000 /ユーザーを私が得るすべては、ハッシュです。 ?私はlocalhostを訪問したとき:3000 / users.jsコールバック=ショーを、私は良い結果を得る
。のは、 JSONPを見てみましょうコードする。応答は、アレイ内にラップされている理由私は理解していません。
私はこの文を交換し、別のラックミドルウェアを作成した。
[status, headers, [response]]
この文を使用して、
[status, headers, response]
そして今、すべてが正常に動作してます。
私は、これは、ラックのcontribのバグであることを信じることを拒否します。
応答は、アレイ内にラップされている理由誰かが私を啓発することができますし、どのように私は自分のアプリケーションでは、ラックのcontribを使用することができます。
私のアプリケーションの完全なソースコードはこちらのです。ちょうどそれのクローンを作成し、ローカルホスト上で実行します。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
これは間違っparamsは、コールバックが含まれていなかった場合には、アレイ内の応答をラップしました。それはのparamsは、コールバックが含まれていた場合に、アレイ内の応答をラップする必要がある理由は、ラックの応答は)(.eachに対応する必要があるためです。
所属していません StackOverflow