![](/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.