![](/img/trans.png)
[英]jquery ajax post request does not accept absolute url rails application
[英]Why does rails not recognize `Accept: application/json` in the request header?
我有一些前端 javascript 向我的后端 rails 服务器发出异步 http 请求。 在前端我没有使用 XHR(我使用axios
,尽管这与问题并不完全相关)。
在请求中,我设置以下内容来告诉服务器我正在发送 JSON 并确保我得到 JSON 回来:
const config = {
headers: {
"Content-Type": "application/json",
"Accept": "application/json"
}
};
在我的后端 Rails controller 如果检查请求我可以验证Accept
header:
> request.headers
"HTTP_ACCEPT"=>"application/json, text/plain, */*"
但是 ActionPack/Rails 仍然不尊重这一点,默认format
为:html
> request.format
=> #<Mime::Type:0x00007fe223919f80 @hash=-1773238723920954657, @string="text/html", @symbol=:html, @synonyms=["application/xhtml+xml"]>
这是为什么?
我知道我可以 append .json
对我的请求 URL “强制”指定该格式,但这是唯一的选择吗? 我可以很容易地 append ,但它似乎是特定于 Rails 的实现,而不是真正的“正确”方法。
此外, request.format
方法的源代码明确将:json
设置为 XHR 请求的格式——rails 目前是否只考虑 XHR 请求?
谢谢!
您所做的是正确的,但是从浏览器发送 Axios/Fetch API 请求将从浏览器端显示“CORS”错误(您可以在浏览器开发工具控制台中看到它)。 你可以从MDN Docs了解更多
要解决此问题,您需要将Access-Control-Allow-Origin
Header 发送到您在 web 服务器上收到的请求。 您可以通过在application_controller.rb
中添加这个 header 手动完成,或者只需使用像rack-cors
这样的 gem。 我将向您展示如何使用rack-cors
gem:
Gemfile
中添加gem 'rack-cors'
bundle i
在config/application.rb
文件中,添加以下行:
config.middleware.insert_before 0, Rack::Cors do allow do origins '*' resource '*', headers: :any, methods: [:get, :post, :options] end end
现在重新启动您的 Rails 服务器
现在再次调用 API 而不在 URL 的末尾强制.json
并且它应该可以工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.