我使用的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

当我访问本地主机:3000 /用户的所有我得到的是一个哈希值。当我访问本地主机:3000 / users.js回调=显示然后我得到很好的结果。

让我们来看看 JSONP代码。我不明白为什么响应被包裹在一个阵列。

我创建另一个Rack中间件其中I代替此语句

      [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确实包括一个回调的情况下的阵列响应的原因是因为机架响应必须)响应。每个(

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top