當(dāng)jQuery.ajax()的jsonp碰上post

來源,以前一直以為當(dāng)$.ajax()的 dataType設(shè)置為jsonp時,其method(請求方法)無論怎么設(shè)置,都會變成get,直到前兩天遇到了一個坑。

關(guān)于跨域請求與jsonp

  • 跨域:由于受到同源策略(協(xié)議、域名、端口三者必須全部相同)的影響,ajax請求會受到限制,要突破這種限制,跨域便產(chǎn)生了??缬虻慕鉀Q方案有多種,這里不展開闡述,只是針對GET請求中的jsonp跨域解決方案做一下說明。
  • jsonp,本質(zhì)上jsonp不是xhr異步請求,就是請求了一個js文件,因此在chrome的network面板中的xhr標(biāo)簽下看不到j(luò)sonp的跨域請求,在js標(biāo)簽下能看到。就是利用script標(biāo)簽中src不受同源策略的限制,前端定義了回調(diào)函數(shù),請求的js腳本中獲取數(shù)據(jù),并執(zhí)行前端的回調(diào)函數(shù),因此前后端需要統(tǒng)一定義下回調(diào)函數(shù)名。
  • $.ajax中jsonp,$.ajax對jsonp進(jìn)行了封裝看起來像是ajax請求。由于jsonp是針對get請求的跨域解決,因此之前的經(jīng)驗(yàn)告訴我,即使type設(shè)置了post,在jsonp的時候,也會自動轉(zhuǎn)換成get,直到有一天踩了個坑。翻看$.ajax模塊的源碼發(fā)現(xiàn),只有去手動設(shè)置crossDomain為true,或者實(shí)際上是跨域,才會設(shè)置為get。否則還是填入的type
image.png
image.png
  • 結(jié)論:手動設(shè)置crossDomain為true,或者真的是跨域,才會修改type為GET,否則還是傳入的type參數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容