现在我发现 Backbone 不支持开箱即用的跨域调用。
Backbone.js “支持”跨域调用。事实上,它并不特定于backbone.js,它是浏览器的角色来支持它。在兼容 CORS 的浏览器中,每个请求(POST、GET)之前都有一个 OPTIONS 请求,以检查服务器是否授权相应的 POST 或 GET 请求。
所以你只需要在你的 Rails 应用程序中响应这个新的调用。例如 :
class ApplicationController < ActionController::Base
before_filter :cors_preflight_check
after_filter :cors_set_access_control_headers
# For all responses in this controller, return the CORS access control headers.
def cors_set_access_control_headers
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
headers['Access-Control-Max-Age'] = "1728000"
end
# If this is a preflight OPTIONS request, then short-circuit the
# request, return only the necessary headers and return an empty
# text/plain.
def cors_preflight_check
if request.method == :options
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
headers['Access-Control-Allow-Headers'] = 'X-Requested-With, X-Prototype-Version'
headers['Access-Control-Max-Age'] = '1728000'
render :text => '', :content_type => 'text/plain'
end
end
end
这篇好文章的代码:http ://www.tsheffler.com/blog/?p=428
所以如果你的 Nginx 插件工作正常,你应该没问题。只需检查您的Access-Control-Allow-Origin
标头是否包含执行 javascript 的域。