ラックJSONPは、単純な要求のために働くが、Railsの2.3での.js通話のために働くいません

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

  •  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に対応する必要があるためです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top