JSON與JSONP

說到AJAX就會不可避免的面臨兩個問題,第一個是AJAX以何種格式來交換數據?第二個是跨域的需求如何解決魁亦?這兩個問題目前都有不同的解決方案牛郑,比如數據可以用自定義字符串或者用XML來描述,跨域可以通過服務器端代理來解決签财。

但到目前為止最被推崇或者說首選的方案還是用JSON來傳數據串慰,靠JSONP來跨域。而這就是本文將要講述的內容唱蒸。

什么是JSON邦鲫?


前面簡單說了一下,JSON是一種基于文本的數據交換方式神汹,或者叫做數據描述格式掂碱,你是否該選用他首先肯定要關注它所擁有的優(yōu)點怜姿。

**JSON的優(yōu)點:**

1、基于純文本疼燥,跨平臺傳遞極其簡單沧卢;

2、Javascript原生支持醉者,后臺語言幾乎全部支持但狭;

3、輕量級數據格式撬即,占用字符數量極少立磁,特別適合互聯網傳遞;

4剥槐、可讀性較強唱歧,雖然比不上XML那么一目了然,但在合理的依次縮進之后還是很容易識別的粒竖;

5颅崩、容易編寫和解析,當然前提是你要知道數據結構蕊苗;

JSON的缺點當然也有沿后,但在作者看來實在是無關緊要的東西,所以不再單獨說明朽砰。

**JSON的格式或者叫規(guī)則:**

JSON能夠以非常簡單的方式來描述數據結構尖滚,XML能做的它都能做,因此在跨平臺方面兩者完全不分伯仲瞧柔。

1漆弄、JSON只有兩種數據類型描述符,大括號{}和方括號[]造锅,其余英文冒號:是映射符置逻,英文逗號,是分隔符,英文雙引號""是定義符备绽。

2券坞、大括號{}用來描述一組“不同類型的無序鍵值對集合”(每個鍵值對可以理解為OOP的屬性描述),方括號[]用來描述一組“相同類型的有序數據集合”(可對應OOP的數組)肺素。

3恨锚、上述兩種集合中若有多個子項,則通過英文逗號,進行分隔倍靡。

4猴伶、鍵值對以英文冒號:進行分隔,并且建議鍵名都加上英文雙引號"",以便于不同語言的解析他挎。

5筝尾、JSON內部常用數據類型無非就是字符串、數字办桨、布爾筹淫、日期、null 這么幾個呢撞,字符串必須用雙引號引起來损姜,其余的都不用,日期類型比較特殊殊霞,這里就不展開講述了摧阅,只是建議如果客戶端沒有按日期排序功能需求的話,那么把日期時間直接作為字符串傳遞就好绷蹲,可以省去很多麻煩棒卷。

什么是JSONP?


? ? ? ? JSONP(JSON with Padding)是JSON的一種“使用模式”祝钢,可用于解決主流瀏覽器的跨域數據訪問的問題比规。由于同源策略,一般來說位于 server1.example.com 的網頁無法與不是 server1 .example .com的服務器溝通太颤,而 HTML 的script元素是一個例外苞俘。利用scrip元素的這個開放策略盹沈,網頁可以得到從其他來源動態(tài)產生的 JSON 資料龄章,而這種使用模式就是所謂的 JSONP。用 JSONP 抓到的資料并不是 JSON乞封,而是任意的JavaScript做裙,用 JavaScript 直譯器執(zhí)行而不是用 JSON 解析器解析。

其實我對于JSONP的理解還很膚淺肃晚,大概知道這是一個什么概念而已锚贱。別人怎么說都聽不懂,我的理解关串,JSONP就是用< scrip 去引入一個遠端的PHP文件拧廊,然后PHP返回的值封裝成< scrip來應付瀏覽器,成功繞過瀏覽器禁止跨域的數據訪問的條文晋修。雖然路已經通常了吧碾,但是本端和遠端文件還存在相互不認識的問題,所以最簡單的方式是在本端引入PHP文件之前定義一些函數墓卦,這些函數就是專門給遠端PHP用的倦春,敲門磚而已。例如:alert('我是本地函數,可以被跨域的remote.js文件調用睁本,遠程js帶來的數據是:'+data.result);調用者可以傳一個參數過去告訴服務端“我想要一段調用XXX函數的js代碼尿庐,請你返回給我”,于是服務器就可以按照客戶端的需求來生成js腳本并響應了呢堰。

Ajax和JSONP對比:


1抄瑟、ajax和jsonp這兩種技術在調用方式上“看起來”很像,目的也一樣暮胧,都是請求一個url锐借,然后把服務器返回的數據進行處理,因此jquery和ext等框架都把jsonp作為ajax的一種形式進行了封裝往衷;

2钞翔、但ajax和jsonp其實本質上是不同的東西。ajax的核心是通過XmlHttpRequest獲取非本頁內容席舍,而jsonp的核心則是動態(tài)添加標簽來調用服務器提供的js腳本布轿。

3、所以說来颤,其實ajax與jsonp的區(qū)別不在于是否跨域汰扭,ajax通過服務端代理一樣可以實現跨域,jsonp本身也不排斥同域的數據的獲取福铅。

4萝毛、還有就是,jsonp是一種方式或者說非強制性協議滑黔,如同ajax一樣笆包,它也不一定非要用json格式來傳遞數據,如果你愿意略荡,字符串都行庵佣,只不過這樣不利于用jsonp提供公開服務。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末汛兜,一起剝皮案震驚了整個濱河市巴粪,隨后出現的幾起案子,更是在濱河造成了極大的恐慌粥谬,老刑警劉巖肛根,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異漏策,居然都是意外死亡派哲,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門哟玷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狮辽,“玉大人一也,你說我怎么就攤上這事『聿保” “怎么了椰苟?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長树叽。 經常有香客問我舆蝴,道長,這世上最難降的妖魔是什么题诵? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任洁仗,我火速辦了婚禮,結果婚禮上性锭,老公的妹妹穿的比我還像新娘赠潦。我一直安慰自己,他們只是感情好草冈,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布她奥。 她就那樣靜靜地躺著,像睡著了一般怎棱。 火紅的嫁衣襯著肌膚如雪哩俭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天拳恋,我揣著相機與錄音凡资,去河邊找鬼。 笑死谬运,一個胖子當著我的面吹牛隙赁,可吹牛的內容都是我干的。 我是一名探鬼主播吩谦,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼鸳谜,長吁一口氣:“原來是場噩夢啊……” “哼膝藕!你這毒婦竟也來了式廷?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤芭挽,失蹤者是張志新(化名)和其女友劉穎滑废,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體袜爪,經...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蠕趁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了辛馆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俺陋。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡豁延,死狀恐怖,靈堂內的尸體忽然破棺而出腊状,到底是詐尸還是另有隱情诱咏,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布缴挖,位于F島的核電站袋狞,受9級特大地震影響,放射性物質發(fā)生泄漏映屋。R本人自食惡果不足惜苟鸯,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望棚点。 院中可真熱鬧早处,春花似錦、人聲如沸瘫析。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颁股。三九已至么库,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甘有,已是汗流浹背诉儒。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亏掀,地道東北人忱反。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像滤愕,于是被迫代替她去往敵國和親温算。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內容