關(guān)于jQuery.ajax()的jsonp碰上post詳解
前言
以前一直以為當(dāng)$.ajax()
的 dataType設(shè)置為jsonp時(shí),其method(請(qǐng)求方法)無(wú)論怎么設(shè)置,都會(huì)變成get,直到前兩天遇到了一個(gè)坑。
下面來(lái)一起看看詳細(xì)的介紹:
關(guān)于跨域請(qǐng)求與jsonp
- 跨域:由于受到同源策略(協(xié)議、域名、端口三者必須全部相同)的影響,ajax請(qǐng)求會(huì)受到限制,要突破這種限制,跨域便產(chǎn)生了??缬虻慕鉀Q方案有多種,這里不展開(kāi)闡述,只是針對(duì)GET請(qǐng)求中的jsonp跨域解決方案做一下說(shuō)明。
- jsonp,本質(zhì)上jsonp不是xhr異步請(qǐng)求,就是請(qǐng)求了一個(gè)js文件,因此在chrome的network面板中的xhr標(biāo)簽下看不到j(luò)sonp的跨域請(qǐng)求,在js標(biāo)簽下能看到。就是利用script標(biāo)簽中src不受同源策略的限制,前端定義了回調(diào)函數(shù),請(qǐng)求的js腳本中獲取數(shù)據(jù),并執(zhí)行前端的回調(diào)函數(shù),因此前后端需要統(tǒng)一定義下回調(diào)函數(shù)名。
$.ajax
中jsonp,$.ajax
對(duì)jsonp進(jìn)行了封裝看起來(lái)像是ajax請(qǐng)求。由于jsonp是針對(duì)get請(qǐng)求的跨域解決,因此之前的經(jīng)驗(yàn)告訴我,即使type設(shè)置了post,在jsonp的時(shí)候,也會(huì)自動(dòng)轉(zhuǎn)換成get,直到有一天踩了個(gè)坑。翻看$.ajax模塊的源碼發(fā)現(xiàn),只有去手動(dòng)設(shè)置crossDomain為true,或者實(shí)際上是跨域,才會(huì)設(shè)置為get。否則還是填入的type
結(jié)論:
手動(dòng)設(shè)置crossDomain為true,或者真的是跨域,才會(huì)修改type為GET,否則還是傳入的type參數(shù)
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
jQuery學(xué)習(xí)心得總結(jié)(必看篇)
下面小編就為大家?guī)?lái)一篇jQuery學(xué)習(xí)心得總結(jié)(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06jquery實(shí)現(xiàn)拖拽調(diào)整Div大小
這里給大家分享的是一段自己編寫的使用jQuery實(shí)現(xiàn)拽調(diào)整Div層大小的代碼,非常實(shí)用,推薦給有需要的小伙伴們。2015-01-01jquery樹(shù)形菜單效果的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇jquery樹(shù)形菜單效果的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06jQuery基于ajax方式實(shí)現(xiàn)用戶名存在性檢查功能示例
這篇文章主要介紹了jQuery基于ajax方式實(shí)現(xiàn)用戶名存在性檢查功能,結(jié)合實(shí)例形式分析了jQuery前臺(tái)ajax交互及后臺(tái)C#驗(yàn)證操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-02-02ajax無(wú)刷新動(dòng)態(tài)調(diào)用股票信息(改良版)
今日閑來(lái)無(wú)事,把上次寫的代碼稍微改了改。增加了動(dòng)態(tài)追加和刪除股票信息的功能(代碼基于jquery運(yùn)行:http://jquery.com/) 。由于對(duì)Ajax技術(shù)的認(rèn)識(shí)還只是在初級(jí)階段,總覺(jué)得這么些有點(diǎn)別扭,希望大蝦能夠指點(diǎn)一二。2008-11-11jQuery如何實(shí)現(xiàn)點(diǎn)擊頁(yè)面獲得當(dāng)前點(diǎn)擊元素的id或其他信息
點(diǎn)擊頁(yè)面獲得當(dāng)前點(diǎn)擊元素的id或者其他信息,使用jquery可以輕松做到這一點(diǎn),下面有個(gè)不錯(cuò)的示例,希望對(duì)大家有所幫助2014-01-01firefox下jquery ajax返回object XMLDocument處理方法
使用jquery ajax處理struts2 返回json類型的時(shí)候,ajax執(zhí)行成功返回結(jié)果為object XMLDocument,解決方法如下2014-01-01jQuery實(shí)現(xiàn)標(biāo)題有打字效果的焦點(diǎn)圖代碼
這篇文章主要介紹了jQuery實(shí)現(xiàn)標(biāo)題有打字效果的焦點(diǎn)圖代碼,可實(shí)現(xiàn)幻燈片切換顯示時(shí)標(biāo)題同步逐個(gè)打印顯示的效果,涉及jQuery操作json格式數(shù)據(jù)及時(shí)間函數(shù)的相關(guān)技巧,需要的朋友可以參考下2015-11-11jquery validate和jquery form 插件組合實(shí)現(xiàn)驗(yàn)證表單后AJAX提交
在ajax流行的時(shí)代,好像很少能看見(jiàn)傳統(tǒng)的同步提交表單方式了,是啊我們當(dāng)然要用更加給力的AJAX來(lái)實(shí)現(xiàn)異步無(wú)刷新提交表單,好了開(kāi)始今天的jQuery之旅吧,今天我們來(lái)利用jquery.validate和jquery.form 插件組合實(shí)現(xiàn)驗(yàn)證表單后AJAX提交 ,需要的朋友可以參考下2015-08-08