2009-07-15 12 views
1

私はRails 2.3を使用しています。私はJSONPをサポートすることに決めました。新しいアプリケーションを作成しました。そして、走ったスクリプト/足場ユーザー名を生成:3000 /ユーザー私が得るすべてはハッシュです:文字列rack-jsonpは単純なリクエストでは機能しませんが、Rails 2.3の.jsコールで動作します

を私はlocalhostを訪問するとこれは私の全体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/users.js?callback = showを訪問すると良い結果が得られます。

jsonp codeを見てみましょう。私は応答が配列でラップされている理由を理解していません。

私はこの文

 [status, headers, response] 

そして今、すべてが正常に動作していると、この文に

 [status, headers, [response]] 

を交換し、別のラックミドルウェアを作成しました。

私はこれがrack-contribのバグであると信じていません。

回答がアレイでラップされている理由と、アプリケーションでrack-contribを使用する方法を教えてもらえますか?

私のアプリケーションの完全なソースコードis hereそれをクローンして、localhost:3000で実行してください。

答えて

2

コードが間違っています。ここでは、それがどうあるべきかです:それは間違ってのparamsは、コールバックが含まれていなかった場合は、アレイ内の応答をラップして

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

関連する問題