關(guān)于jQuery.ajax()的jsonp碰上post詳解
前言
以前一直以為當$.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標簽下看不到j(luò)sonp的跨域請求,在js標簽下能看到。就是利用script標簽中src不受同源策略的限制,前端定義了回調(diào)函數(shù),請求的js腳本中獲取數(shù)據(jù),并執(zhí)行前端的回調(diào)函數(shù),因此前后端需要統(tǒng)一定義下回調(diào)函數(shù)名。
$.ajax
中jsonp,$.ajax
對jsonp進行了封裝看起來像是ajax請求。由于jsonp是針對get請求的跨域解決,因此之前的經(jīng)驗告訴我,即使type設(shè)置了post,在jsonp的時候,也會自動轉(zhuǎn)換成get,直到有一天踩了個坑。翻看$.ajax模塊的源碼發(fā)現(xiàn),只有去手動設(shè)置crossDomain為true,或者實際上是跨域,才會設(shè)置為get。否則還是填入的type
結(jié)論:
手動設(shè)置crossDomain為true,或者真的是跨域,才會修改type為GET,否則還是傳入的type參數(shù)
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
jQuery基于ajax方式實現(xiàn)用戶名存在性檢查功能示例
這篇文章主要介紹了jQuery基于ajax方式實現(xiàn)用戶名存在性檢查功能,結(jié)合實例形式分析了jQuery前臺ajax交互及后臺C#驗證操作的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2017-02-02ajax無刷新動態(tài)調(diào)用股票信息(改良版)
今日閑來無事,把上次寫的代碼稍微改了改。增加了動態(tài)追加和刪除股票信息的功能(代碼基于jquery運行:http://jquery.com/) 。由于對Ajax技術(shù)的認識還只是在初級階段,總覺得這么些有點別扭,希望大蝦能夠指點一二。2008-11-11jQuery如何實現(xiàn)點擊頁面獲得當前點擊元素的id或其他信息
點擊頁面獲得當前點擊元素的id或者其他信息,使用jquery可以輕松做到這一點,下面有個不錯的示例,希望對大家有所幫助2014-01-01firefox下jquery ajax返回object XMLDocument處理方法
使用jquery ajax處理struts2 返回json類型的時候,ajax執(zhí)行成功返回結(jié)果為object XMLDocument,解決方法如下2014-01-01jquery validate和jquery form 插件組合實現(xiàn)驗證表單后AJAX提交
在ajax流行的時代,好像很少能看見傳統(tǒng)的同步提交表單方式了,是啊我們當然要用更加給力的AJAX來實現(xiàn)異步無刷新提交表單,好了開始今天的jQuery之旅吧,今天我們來利用jquery.validate和jquery.form 插件組合實現(xiàn)驗證表單后AJAX提交 ,需要的朋友可以參考下2015-08-08