javascript - jquery中的$.post()為什么不能跨域提交數(shù)據(jù)呢?
問題描述
如題,為什么jquery中封裝的ajax方法,使用jsonp可以get方式提交數(shù)據(jù),但是直接用post的方式,跨域后就無法提交,其根本原因是什么呢?
問題解答
回答1:jquery自身的功能是不支持的,但是你可以基于jquery實(shí)現(xiàn)跨域post。
jquery本身只支持jsonp跨域,但是jsonp的原理限制了只能支持get。
如果想要實(shí)現(xiàn)原生jquery跨域,在你的請求地址的head里面加上Access-Control-Allow-Origin,值設(shè)置成調(diào)用該API的域名(或者*)
回答2:跨域一般分兩種:
jsonp 跨域。 jsonp 本來就是使用 get 文件的方法繞過跨域檢查,所以不支持post。也有第三方庫用get來模擬post請求。
COR 跨域。 COR 跨域需要修改服務(wù)端 Access-Control-Allow-Origin 響應(yīng)。 一般客戶端會發(fā)送兩次 post 請求,第一次類型為 option,服務(wù)端響應(yīng)允許后,第二次發(fā)送真正的帶數(shù)據(jù)的請求。如果答主條件許可,盡量使用第二種跨域方法吧,可以直接支持 post。
如果無法修改服務(wù)端配置,答主可以去找一下第三方的庫,看看能否用jsonp模擬 post 請求。
回答3:注意,不是jquery不支持,而是瀏覽器在沒有允許跨域的頭的時候,就把響應(yīng)攔截掉了,然后給你了個錯誤。jquery在接收到這個錯誤之后,就會給你報(bào)跨域的錯誤。你可以抓個包看看(注意不要用瀏覽器的f12抓包),其實(shí)服務(wù)端的響應(yīng)都在的。
相關(guān)文章:
1. 求大神支招,php怎么操作在一個html文件的<head>標(biāo)記內(nèi)添加內(nèi)容?2. 安裝了“PHP工具箱”,但只能以“游客”身份登錄3. 老師們php,插入數(shù)據(jù)庫mysql,都是空的,要怎么解決4. 跨類調(diào)用后,找不到方法5. 在mybatis使用mysql的ON DUPLICATE KEY UPDATE語法實(shí)現(xiàn)存在即更新應(yīng)該使用哪個標(biāo)簽?6. 致命錯誤: Class ’appfacadeTest’ not found7. 在應(yīng)用配置文件 app.php 中找不到’route_check_cache’配置項(xiàng)8. PHP類屬性聲明?9. 怎么php怎么通過數(shù)組顯示sql查詢結(jié)果呢,查詢結(jié)果有多條,如圖。10. phpstady在win10上運(yùn)行
