999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

動態script標簽技術結合JSON數據交換格式解決Ajax的跨域問題

2008-04-12 00:00:00孫朝偉
中國新技術新產品 2008年21期

摘要:本文討論了結合使用JSON和Dynamic script Tag技術來解決Ajax應用中跨域訪問第三方Web服務的問題。

關鍵詞:Ajax;JSON;動態script標簽;跨域

1 引言

當前多數的Web服務都是采用XML作為數據交換格式。因此當我們在Ajax應用中會使用XMLHttpRequest對象來訪問Web服務的時候就會遇到跨域限制問題。

跨域問題的實質是由于瀏覽器對JavaScript腳本的安全限制使得在Ajax應用中只能訪問本域的Web服務。我們通常選用的解決方案是在本域的服務器上建立一個跨域代理(Cross Domain Proxy)來間接的訪問第三放Web服務。但是跨域代理需要在本域的服務器上運行,不僅浪費服務器資源,而且也增加了開發和維護成本。如果我們在編寫Web服務的時候放棄XML作為數據交換格式,而采用JSON(JavaScript Object Notation)數據交換格式,那么將能夠利用動態建立script標簽的方式來規避跨域限制。

2 動態script標簽技術

我們知道,script標簽是屬于HTML標簽,而HTML標簽是沒有跨域限制的。從而我們可以使用script標簽中的src屬性來訪問其他任意域的URL鏈接來獲取數據。

文檔對象模型(DOM,Document Object Model)為我們提供了動態建立script標簽的能力。我們可以在需要的時候使用document.createElement()方法來建立一個script標簽對象,并使用setAttribute()方法來設定它的src、id、type、language等屬性,這樣當我們使用appendChild()方法將這個剛剛建立的script標簽添加到網頁中后,我們就能夠得到這個script標簽src屬性的URL所返回的數據。

3 JSON數據交換格式

Web服務使用XML作為數據交換格式是不能用script標簽訪問Web服務并獲取數據的。但如果Web服務使用JSON作為數據交換格式就不會存在這個問題了。

3.1 JSON的定義

JSON建構于兩種結構:

“名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),紀錄(record),結構(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關聯數組 (associative array)。

值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數組(array)。

簡單來說,JSON實際上是利用現代編程語言大多支持的一些基本數據結構,例如數組、字符串、對象等。進行抽象而來的一種通用數據表述格式。這使得JSON數據格式在能夠支持這些數據結構的編程語言之間能夠進行數據的交換。

3.2JSON格式舉例

使用XML格式表示一個學生的姓名、學號、成績等信息,可能如下:

<?xml version=“1.0”?>

<students>

<student>

<name>張三</name>

<studentID>200801</studentID>

<grade>80</grade>

</student>

<student>

<name>李四</name>

<studentID>200802</studentID>

<grade>90</grade>

</student>

</students>

上述XML轉換為JSON格式表示:

var StudentsJSON = {

student:[

{

name:'張三',

studentid:200801,

grade:80

},

{

name:'李四',

studentid:200802,

grade:90

}

]

}

從上面的例子中我們可以看出,XML和JSON有比較好的對應關系,XML數據可以非常容易的轉換到JSON。事實也正是如此,大多數的XML數據再轉換為JSON的時候都不會有問題。例如在http://www.thomasfrank.se/xml_to_json.html網站中就提供一個自動進行XML to JSON轉換的JavaScript腳本。

3.3 JSON數據的訪問

JSON數據的訪問相對于XML要簡單很多。可以如同JavaScript對象一樣訪問JSON數據。例如在上述JSON數據中,我們要訪問第一個學生的姓名,只要寫:StudentsJSON.student[0].name就可以了。要訪問第二個同學的學號:StudentsJSON.student[1].studentid

4 實例研究

雅虎為我們提供了一個圖片搜索Web服務,URL為:http://search.yahooapis.com/ImageSearchService/V1/imageSearch。這個Web服務支持返回JSON格式數據。該Web服務接受的參數為如下:

只要動態構建該URL并加入動態創建的script標簽中的src屬性中即可獲得Web服務返回的JSON數據。查詢的結果都在ResultSet.Result[0]數組中。

當我們構建好查詢網頁后,可以在本機上用IE或Firefox等瀏覽器直接打開該網頁并測試。

5 實驗結果及比較

可以看到采用動態script標簽技術結合JSON數據交換格式的方法使得跨域訪問Web服務非常的容易。然而在Web服務中使用JSON數據交換格式相對于XML又有那些優缺點呢?下面從五個方面進行分析:

可讀性:JSON和XML的可讀性可謂不相上下,JSON采用常見的語法數據結構,XML使用的是規范的標簽形式。

可擴展性:XML天生有很好的擴展性,而JSON也不遜于XML。

編碼難度:XML有豐富的編碼工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的編碼明顯比XML容易許多,即使不借助工具也能寫出JSON的代碼,可是要寫好XML就不太容易了。

解碼難度:XML的解析得考慮子節點父節點,讓人頭昏眼花,而JSON的解析難度幾乎為0。這一點XML輸的真是沒話說。

流行度:XML已經被業界廣泛的使用,而JSON才剛剛開始,但是在Ajax這個特定的領域,未來的發展也許XML要讓位于JSON。到時Ajax就應該變成Ajaj (Asynchronous JavaScript and JSON)了。

參考文獻

[1]json. json.org. http://www.json.org/json-zh.html

[2]Nicholas C. Zakas. JavaScript高級程序設計. 人民郵電出版社,2006年

主站蜘蛛池模板: 欧美激情网址| 国产精品私拍在线爆乳| 亚洲无码日韩一区| 伊人福利视频| 国产传媒一区二区三区四区五区| 亚洲人成网站18禁动漫无码| 国产99视频精品免费观看9e| 美女裸体18禁网站| 色久综合在线| 香蕉在线视频网站| 又爽又大又黄a级毛片在线视频 | 亚洲免费福利视频| 8090成人午夜精品| 精久久久久无码区中文字幕| 97精品久久久大香线焦| 国产综合欧美| 日韩成人免费网站| 欧美日韩激情在线| 亚洲欧美成人影院| 国产91蝌蚪窝| 无码福利日韩神码福利片| 午夜性刺激在线观看免费| 国产一区二区三区精品久久呦| av一区二区三区高清久久| 人妻一区二区三区无码精品一区 | 一级毛片基地| 精品国产Av电影无码久久久| 91精品国产91久久久久久三级| 91成人在线观看| 日韩中文字幕亚洲无线码| 国产资源免费观看| 国产精品私拍在线爆乳| 全部免费毛片免费播放| 中文字幕日韩丝袜一区| 国产清纯在线一区二区WWW| 极品国产一区二区三区| 亚洲欧美成人在线视频| 成人午夜网址| 色哟哟国产成人精品| 色噜噜狠狠色综合网图区| 国产美女叼嘿视频免费看| www.91中文字幕| 精品国产www| 伊人激情综合| 一本色道久久88亚洲综合| 精品欧美一区二区三区久久久| 老司机精品99在线播放| 9丨情侣偷在线精品国产| 亚洲天堂视频网站| 亚洲资源在线视频| 制服丝袜在线视频香蕉| 国产簧片免费在线播放| 91成人免费观看在线观看| 国产精品思思热在线| 免费一级α片在线观看| 毛片在线看网站| 无码粉嫩虎白一线天在线观看| 亚洲成人高清在线观看| 久视频免费精品6| 欧美在线精品一区二区三区| 色AV色 综合网站| 国产亚洲高清在线精品99| 日本三级精品| 国产情侣一区| 久久国产精品麻豆系列| 欧美第九页| 日韩精品毛片| 欧洲高清无码在线| 亚洲手机在线| 老熟妇喷水一区二区三区| 欧美午夜在线播放| 国产激情在线视频| 老司机精品一区在线视频| 亚洲无码精品在线播放| 国产激情无码一区二区免费| aa级毛片毛片免费观看久| 国产黄在线观看| 国产成年女人特黄特色毛片免| 久一在线视频| 中文字幕无线码一区| 青草免费在线观看| 欧美成人区|