区分同源与非同源
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
JSONP和AJAX相同,都是客戶端向服務(wù)器端發(fā)送請求:1、給服務(wù)器端傳遞內(nèi)容2、從服務(wù)器端獲取數(shù)據(jù) 的方式
AJAX屬于同源策略
JSONP屬于非同源策略(跨域請求) -> 實現(xiàn)跨域請求的方式有很多種,只不過JSONP是最常用的
區(qū)分同源和非同源:
當前頁面的地址 ? && ?數(shù)據(jù)請求的接口地址
? ? 1)協(xié)議 ?2)域名或者IP 3)端口號
? ? 以上三部分完全相同屬于同源策略,就是用AJAX技術(shù)請求數(shù)據(jù),如果有一個不同就屬于非同源策略,一般使用JSONP技術(shù)請求數(shù)據(jù)
JSONP的原理:JSONP請求一定需要對方的服務(wù)器做支持才可以
在script的世界中,沒有同源跨域這一說,只要你給我src屬性中的地址是一個合法的地址,script都可以把對應(yīng)的內(nèi)容請求回來,JSONP就是利用了script的這個原理
? ? 1、首先把需要請求數(shù)據(jù)的那個跨域的API數(shù)據(jù)接口的地址賦值給script的src屬性中
? ? 2、把當前頁面中的某一個函數(shù)名當做參數(shù)值傳遞給需要跨域請求數(shù)據(jù)的服務(wù)器(url問好傳參:callback=fn)
? ? 3、服務(wù)器接收到請求后,需要進行特殊的處理,把你傳遞進來的函數(shù)名和它需要給你數(shù)據(jù)拼接成一個字符串, 例如:我們傳遞進去的函數(shù)名是fn,它準備好的數(shù)據(jù)是"fn([{'name':'xxx'}])"
? ? 4、最后服務(wù)器把準備的數(shù)據(jù)通過HTTP協(xié)議返回給我們客戶端,客戶端發(fā)現(xiàn)其實就是讓我們的fn執(zhí)行,而且還給fn傳遞了一堆的數(shù)據(jù),那些數(shù)據(jù)就是我們想要的
jquery的ajax和JSONP的調(diào)用
? ? ajax:
? ? $.ajax({
????? ? url:"",
????? ? type:"",
????? ? dataType:"json",
????? ? data:null,
????? ? async:true,
????? ? timeout: 1000, ?//設(shè)置超時時間,一般都設(shè)置3000ms
????????cache:false, //設(shè)定get請求的時候不走緩存數(shù)據(jù),原理就是在url后面加一個緩存數(shù),默認值是true
????? ? success:function(data){},
????? ? error:function(data){}
????})
jsonp:都是GET和異步請求的,不存在其他的請求方式和同步請求,而且jquery會默認會給JSONP的請求清除緩存
$.ajax({
????? ? url:"",
????? ? dataType:"jsonp",
????? ? timeout: 1000, ?//設(shè)置超時時間,一般都設(shè)置3000ms
? ? ? ?jsonpCallback:"fn" //自定義傳遞給服務(wù)器的函數(shù)名,而不是jquery自動生成的
????? ? jsonp:"cb" ?//吧傳遞函數(shù)名的那個形參callback變?yōu)閏b
????})
????
?
?
?
轉(zhuǎn)載于:https://my.oschina.net/u/3419199/blog/1528274
總結(jié)
- 上一篇: abs期刊分类2020_收藏:中科院期刊
- 下一篇: 超线程cpu的寄存器_一文总结 CPU