javascript - jquery中的$.post()為什么不能跨域提交數(shù)據(jù)呢?
問(wèn)題描述
如題,為什么jquery中封裝的ajax方法,使用jsonp可以get方式提交數(shù)據(jù),但是直接用post的方式,跨域后就無(wú)法提交,其根本原因是什么呢?
問(wèn)題解答
回答1:jquery自身的功能是不支持的,但是你可以基于jquery實(shí)現(xiàn)跨域post。
jquery本身只支持jsonp跨域,但是jsonp的原理限制了只能支持get。
如果想要實(shí)現(xiàn)原生jquery跨域,在你的請(qǐng)求地址的head里面加上Access-Control-Allow-Origin,值設(shè)置成調(diào)用該API的域名(或者*)
回答2:跨域一般分兩種:
jsonp 跨域。 jsonp 本來(lái)就是使用 get 文件的方法繞過(guò)跨域檢查,所以不支持post。也有第三方庫(kù)用get來(lái)模擬post請(qǐng)求。
COR 跨域。 COR 跨域需要修改服務(wù)端 Access-Control-Allow-Origin 響應(yīng)。 一般客戶(hù)端會(huì)發(fā)送兩次 post 請(qǐng)求,第一次類(lèi)型為 option,服務(wù)端響應(yīng)允許后,第二次發(fā)送真正的帶數(shù)據(jù)的請(qǐng)求。如果答主條件許可,盡量使用第二種跨域方法吧,可以直接支持 post。
如果無(wú)法修改服務(wù)端配置,答主可以去找一下第三方的庫(kù),看看能否用jsonp模擬 post 請(qǐng)求。
回答3:注意,不是jquery不支持,而是瀏覽器在沒(méi)有允許跨域的頭的時(shí)候,就把響應(yīng)攔截掉了,然后給你了個(gè)錯(cuò)誤。jquery在接收到這個(gè)錯(cuò)誤之后,就會(huì)給你報(bào)跨域的錯(cuò)誤。你可以抓個(gè)包看看(注意不要用瀏覽器的f12抓包),其實(shí)服務(wù)端的響應(yīng)都在的。
相關(guān)文章:
1. android - NavigationView 的側(cè)滑菜單中如何保存新增項(xiàng)(通過(guò)程序添加)2. 提示語(yǔ)法錯(cuò)誤語(yǔ)法錯(cuò)誤: unexpected ’abstract’ (T_ABSTRACT)3. javascript - vue 元素加樣式該怎么做4. tp5 不同控制器中的變量調(diào)用問(wèn)題5. 這段代碼既不提示錯(cuò)誤也看不到結(jié)果,請(qǐng)老師明示錯(cuò)在哪里,謝謝!6. 老師 我是一個(gè)沒(méi)有學(xué)過(guò)php語(yǔ)言的準(zhǔn)畢業(yè)生 我希望您能幫我一下7. javascript - 請(qǐng)問(wèn)一下vue當(dāng)中是在什么時(shí)候請(qǐng)求數(shù)據(jù)保存全局變量的?8. python文檔怎么查看?9. php7.3.4中怎么開(kāi)啟pdo驅(qū)動(dòng)10. 除了 python2 和 python3,ipython notebook 還可以用哪些內(nèi)核?
