2009-07-15 21 views
1

我正在使用Rails 2.3,並決定爲JSONP提供支持。創建一個全新的應用程序。然後運行腳本/生成支架用戶名:字符串rack-jsonp不能用於簡單請求,但適用於Rails 2.3中的.js調用。

這是我整個的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 

當我訪問本地主機:3000 /用戶的所有我得到的是一個哈希值。當我訪問本地主機:3000/users.js?callback =顯示然後我得到了很好的結果。我們來看一下jsonp code。我不明白爲什麼響應被封裝在一個數組中。

我創造了另一個Rack中間件,我代替這種說法

 [status, headers, [response]] 

這種說法

 [status, headers, response] 

而現在一切工作正常。

我不認爲這是一個rack-contrib中的bug。

有人能告訴我爲什麼響應被包裹在一個數組中,我怎麼能在我的應用程序中使用rack-contrib。

我的應用程序的完整源代碼is here。只需克隆它並在localhost:3000上運行即可。

回答

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()。

相關問題