搜尋

首頁  >  問答  >  主體

javascript - jquery中的$.post()為什麼不能跨網域提交資料呢?

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

習慣沉默習慣沉默2749 天前611

全部回覆(3)我來回復

  • 世界只因有你

    世界只因有你2017-05-16 13:38:50

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

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

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

    回覆
    0
  • 仅有的幸福

    仅有的幸福2017-05-16 13:38:50

    跨域一般分兩種:

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

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

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

    回覆
    0
  • 阿神

    阿神2017-05-16 13:38:50

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

    回覆
    0
  • 取消回覆