1

私は Rails 2.3 を使用しており、JSONP のサポートを提供することにしました。まったく新しいアプリケーションを作成しました。次に、スクリプトを実行/足場を生成 ユーザー名:文字列

これは私の環境全体です.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/users にアクセスすると、得られるのはハッシュだけです。localhost:3000/users.js?callback=show にアクセスすると、良い結果が得られます。

jsonp コードを見てみましょう。応答が配列にラップされている理由がわかりません。

このステートメントを置き換える別のRackミドルウェアを作成しました

      [status, headers, [response]]

この声明で

      [status, headers, response]

そして今、すべてがうまくいっています。

これが Rack-contrib のバグだとは信じられません。

応答が配列にラップされている理由と、アプリケーションで Rack-contrib を使用する方法を誰かが教えてくれますか?

私のアプリケーションの完全なソース コードはこちらです。クローンして localhost:3000 で実行するだけです。

4

1 に答える 1

2

そのコードは間違っています。あるべき姿は次のとおりです。

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にコールバックが含まれている場合に応答を配列でラップする必要がある理由は、Rack応答が.each()に応答する必要があるためです。

于 2009-09-03T14:56:25.450 に答える