摘要:同源策略,它是由提出的一個(gè)著名的安全策略,現(xiàn)在所有支持的瀏覽器都會(huì)使用這個(gè)策略??蛻舳嗽趯?duì)文件調(diào)用成功之后,也就獲得了自己所需的數(shù)據(jù),剩下的就是按照自己需求進(jìn)行處理和展現(xiàn)了,這種獲取遠(yuǎn)程數(shù)據(jù)的方式看起來非常像,但其實(shí)并不一樣。
參考資料
一、先說說JSON首先JSON是一種基于文本的數(shù)據(jù)交換方式,或者叫做數(shù)據(jù)描述格式。
JSON的優(yōu)點(diǎn):
基于純文本,跨平臺(tái)傳遞極其簡單;
Javascript原生支持,后臺(tái)語言幾乎全部支持;
輕量級(jí)數(shù)據(jù)格式,占用字符數(shù)量極少,特別適合互聯(lián)網(wǎng)傳遞;
可讀性較強(qiáng),雖然比不上XML那么一目了然,但在合理的依次縮進(jìn)之后還是很容易識(shí)別的;
容易編寫和解析,當(dāng)然前提是你要知道數(shù)據(jù)結(jié)構(gòu);
二、同源策略一個(gè)眾所周知的問題,由于同源策略,Ajax直接請(qǐng)求普通文件存在跨域無權(quán)限訪問的問題。
同源策略,它是由Netscape提出的一個(gè)著名的安全策略,現(xiàn)在所有支持JavaScript的瀏覽器都會(huì)使用這個(gè)策略。
但是,Web頁面上調(diào)用js文件時(shí)則不受是否跨域的影響,不僅如此,凡是擁有”src”屬性的標(biāo)簽都擁有跨域的能力,比如、、。
因此,如果想通過純web端跨域訪問數(shù)據(jù)就只有一種方案,那就是在遠(yuǎn)程服務(wù)器上設(shè)法把數(shù)據(jù)裝進(jìn)js格式的文件里,供客戶端調(diào)用和進(jìn)一步處理。
三、JSONPJsonp(JSON with Padding) 是 json 的一種"使用模式",可以讓網(wǎng)頁從別的域名(網(wǎng)站)那獲取數(shù)據(jù),即跨域讀取數(shù)據(jù)。
客戶端通過與調(diào)用腳本一模一樣的方式,來調(diào)用跨域服務(wù)器上動(dòng)態(tài)生成的js格式文件(一般以JSON為后綴),顯而易見,服務(wù)器之所以要?jiǎng)討B(tài)生成JSON文件,目的就在于把客戶端需要的數(shù)據(jù)裝入進(jìn)去。
客戶端在對(duì)JSON文件調(diào)用成功之后,也就獲得了自己所需的數(shù)據(jù),剩下的就是按照自己需求進(jìn)行處理和展現(xiàn)了,這種獲取遠(yuǎn)程數(shù)據(jù)的方式看起來非常像AJAX,但其實(shí)并不一樣。
為了便于客戶端使用數(shù)據(jù),逐漸形成了一種非正式傳輸協(xié)議,也就是JSONP,該協(xié)議的一個(gè)要點(diǎn)就是允許用戶傳遞一個(gè)callback參數(shù)給服務(wù)端,然后服務(wù)端返回?cái)?shù)據(jù)時(shí)會(huì)將這個(gè)callback參數(shù)作為函數(shù)名來包裹住JSON數(shù)據(jù),這樣客戶端就可以隨意定制自己的函數(shù)來自動(dòng)處理返回?cái)?shù)據(jù)了。
ajax和jsonp本質(zhì)上是完全不同的東西。ajax的核心是通過XmlHttpRequest獲取非本頁內(nèi)容,而jsonp的核心則是動(dòng)態(tài)添加