2009-07-15 32 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()。

相关问题