javascript - jquery中的$.post()為什麼不能跨網域提交資料呢?
習慣沉默
習慣沉默 2017-05-16 13:36:50
0
3
629

如題,為什麼jquery中封裝的ajax方法,使用jsonp可以get方式提交數據,但是直接用post的方式,跨域後就無法提交,其根本原因是什麼呢?

習慣沉默
習慣沉默

全部回覆(3)
世界只因有你

jquery自身的功能是不支援的,但是你可以基於jquery實作跨域post。

jquery本身只支援jsonp跨域,但jsonp的原理限制了只能支援get。

如果想要實作原生jquery跨域,在你的請求位址的head裡面加上Access-Control-Allow-Origin,值設定成呼叫該API的網域(或*)

仅有的幸福

跨域一般分兩種:

  1. jsonp 跨域。 jsonp 本來就是使用 get 檔案的方法來繞過跨域檢查,所以不支援post。也有第三方函式庫用get來模擬post請求。

  2. COR 跨域。 COR 跨域需要修改服務端 Access-Control-Allow-Origin 回應。 一般客戶端會發送兩次 post 請求,第一次類型為 option,服務端回應允許後,第二次發送真正的帶資料的請求。
    如果答主條件許可,盡量使用第二種跨域方法吧,可以直接支援 post。

如果無法修改服務端配置,答主可以去找一下第三方的函式庫,看看能否用jsonp模擬 post 請求。

阿神

注意,不是jquery不支持,而是瀏覽器在沒有允許跨域的頭的時候,就把回應攔截掉了,然後給你了個錯誤。 jquery收到這個錯誤後,就會給你報跨域的錯誤。
你可以抓個包包看看(注意不要用瀏覽器的f12抓包),其實服務端的回應都在的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板