來源衡楞,以前一直以為當(dāng)$.ajax()的 dataType設(shè)置為jsonp時(shí)充岛,其method(請(qǐng)求方法)無論怎么設(shè)置泄隔,都會(huì)變成get拒贱,直到前兩天遇到了一個(gè)坑。
關(guān)于跨域請(qǐng)求與jsonp
- 跨域:由于受到同源策略(協(xié)議佛嬉、域名逻澳、端口三者必須全部相同)的影響,ajax請(qǐng)求會(huì)受到限制暖呕,要突破這種限制斜做,跨域便產(chǎn)生了⊥謇浚跨域的解決方案有多種瓤逼,這里不展開闡述,只是針對(duì)GET請(qǐng)求中的jsonp跨域解決方案做一下說明库物。
- 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)行了封裝看起來像是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ù)