国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > AJAX > 正文

淺析json與jsonp區(qū)別及通過(guò)ajax獲得json數(shù)據(jù)后格式的轉(zhuǎn)換

2024-09-01 08:28:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

 有關(guān)json與jsonp的區(qū)別(json才是目的,jsonp只是手段)介紹如下所示:

一言以蔽之,json返回的是一串?dāng)?shù)據(jù);而jsonp返回的是腳本代碼(包含一個(gè)函數(shù)調(diào)用);

JSON其實(shí)就是JavaScript中的一個(gè)對(duì)象,跟var obj={}在質(zhì)上完全一樣,只是在量上可以無(wú)限擴(kuò)展。簡(jiǎn)單地講,json其實(shí)就是JavaScript中的對(duì)象(Object)和數(shù)組(Array,其實(shí)也是對(duì)象)這倆好基友在那兒你嵌我我嵌你地套上n多層,以此模擬出許多復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。

json易于人閱讀和編寫,也易于機(jī)器解析和生成,相對(duì)網(wǎng)絡(luò)傳輸速率較高,功能型網(wǎng)站前后端往往要頻繁大量交換數(shù)據(jù),而json憑借其強(qiáng)大的表現(xiàn)力和高顏值漸漸地成為理想的前后端數(shù)據(jù)交換語(yǔ)言。那xml前輩呢,我覺(jué)得應(yīng)該會(huì)像微軟的xp那樣功成身退。

同源(不懂同源策略的童鞋請(qǐng)自行百度)下的前后端數(shù)據(jù)交換格式確定使用json了,那么問(wèn)題來(lái)了,如果我想獲取別人網(wǎng)站上提供的數(shù)據(jù)腫么做到呢?也就是跨域讀取數(shù)據(jù)問(wèn)題(不要鉆牛角說(shuō)你不需要讀取其他網(wǎng)站的數(shù)據(jù),相信我,你早晚得需要),json行不行呢?答案是No Way,為什么呢,因?yàn)閖son只是普通的文本格式,能讓你這樣就輕松拿到那服務(wù)端就沒(méi)有任何安全和保密性可言了,這樣的話互聯(lián)網(wǎng)世界非亂套不可,這個(gè)問(wèn)題那些牛X的規(guī)范制定者早就想到了,所以使用了同源策略來(lái)限制文件獲取。最后的結(jié)果就是只有像img、script、iframe這類可以指定src屬性的標(biāo)簽有跨域獲取別人網(wǎng)站上數(shù)據(jù)(圖片,腳本,源文件其實(shí)都是數(shù)據(jù))的能力。比如:

<!--京東商品圖片--><img src="http://img30.360buyimg.com/jgsq-productsoa/jfs/t2407/323/1635505465/47386/f2d89d88/56615e00N7a475ee6.jpg" /><!--百度CDN--><script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> 

看來(lái)直接獲取json是行不通了,那有沒(méi)有其他方法能拿到數(shù)據(jù)呢?于是乎jsonp就這樣被聰明的開(kāi)發(fā)者給發(fā)現(xiàn)了,為什么說(shuō)是發(fā)現(xiàn)而不是發(fā)明呢,因?yàn)椴](méi)有涉及到任何新技術(shù),就像發(fā)現(xiàn)ajax一樣。

jsonp原理是這樣的,網(wǎng)站A需要獲取網(wǎng)站B的數(shù)據(jù),網(wǎng)站B說(shuō)我給你們一個(gè)方法,【1. 你們使用<script src="http://www.B.com/open.js"></script>標(biāo)簽先獲取到open.js文件(網(wǎng)站B的責(zé)任),這里邊有你們需要的數(shù)據(jù)。2. 你們獲取數(shù)據(jù)后處理數(shù)據(jù)(總得處理數(shù)據(jù)吧)的方法名必須命名為foo(數(shù)據(jù)請(qǐng)求者的責(zé)任和義務(wù))】,這里相當(dāng)于B網(wǎng)站和請(qǐng)求獲取數(shù)據(jù)者之間建立了一個(gè)協(xié)議,要求請(qǐng)求者務(wù)必按照規(guī)則辦事,如果請(qǐng)求者不能同時(shí)遵守上面兩條就不能按預(yù)期獲取數(shù)據(jù)。額..,這也算相當(dāng)于建立了一個(gè)潛規(guī)則吧

open.js內(nèi)容

foo({"name":"B","age":23});  //為什么不直接寫成json數(shù)據(jù){"name":"B","age":23}呢,原因很簡(jiǎn)單,在js文件總得合乎js語(yǔ)法吧//這也是為什么協(xié)議中明確規(guī)定處理數(shù)據(jù)的方法名必須命名為foo,因?yàn)锽網(wǎng)站是在假定請(qǐng)求者的腳本中已經(jīng)定義了數(shù)據(jù)處理方法foo的情況下返回?cái)?shù)據(jù);//不然就會(huì)報(bào)foo is not defined錯(cuò)誤            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 雷波县| 兖州市| 宁津县| 南康市| 余干县| 宁晋县| 屯门区| 忻州市| 彭泽县| 宁明县| 高陵县| 甘孜县| 大方县| 宁陵县| 固阳县| 麻栗坡县| 灵川县| 家居| 蒙城县| 宁陕县| 尚义县| 社旗县| 平江县| 镇赉县| 休宁县| 高清| 景东| 拉孜县| 南阳市| 武清区| 大足县| 邹平县| 砚山县| 宜城市| 虎林市| 博兴县| 临沭县| 临西县| 丽江市| 繁昌县| 旬邑县|