机架JSONP工作不适合简单的要求,但对于工作中的Rails 2.3的.js电话
-
16-09-2019 - |
题
我使用的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确实包括一个回调的情况下的阵列响应的原因是因为机架响应必须)响应。每个(
不隶属于 StackOverflow