XML和JSON

在企業(yè)開發(fā)中,前端和后端交換數據的時候,一般都不會直接返回字符串砂轻,因為字符串容易出問題。而是返回XML或者JSON格式的數據琢锋。

XML

XML 可擴展標記語言
XML 被設計用來傳輸和存儲數據。

  • XML格式:
    第一行是 XML 聲明:<?xml version="1.0" encoding="UTF-8"?>呢灶,它定義 XML 的版本 (1.0) 和所使用的編碼 吴超。
    在XML中數據都是放在一對標簽中的,標簽名可以隨意寫鸯乃。如下:
    下一行描述文檔的根元素<note>
    接下來 4 行描述根的 4 個子元素(to, from, heading 以及 body)
    最后一行定義根元素的結尾

注意:所有的數據必須有個根標簽鲸阻,如上note;

<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

XML 文檔形成一種樹結構
XML 文檔必須包含根元素缨睡。該元素是所有其他元素的父元素鸟悴。
XML 文檔中的元素形成了一棵文檔樹。這棵樹從根部開始奖年,并擴展到樹的最底端细诸。

<root>
  <child>
    <subchild>.....</subchild>
  </child>
</root>

以上差不多就是XML的固定格式。

那么后端如何返回一個XML數據給我們前端呢

JS端

window.onload = function(){
        var btn = document.querySelector(".btn");
        btn.onclick = function(){
            // 此處ajax是我自己封裝的ajax方法
            ajax({
                type:"GET",
                url:"ajax-xml.php",
                success:function(xhr){//xhr表示調用時傳來的異步對象
                    // 通過xhr.ressponseXML來返回數據
                    console.log(xhr.ressponseXML);//返回的是xml里的#document陋守,可以使用DOM相關的方法來操作震贵。
                    var res = xhr.ressponseXML;
                    console.log(res.querySelector("note").innerHTML);//比如這里查看note元素里面的內容鹏浅。
                },
                error:function(xhr){//xhr表示調用時傳來的異步對象
                    console.log(xhr.status);
                }
            });
        }
    } 

PHP端

<?php
header(string:"content-type:text/xml;charset="utf-8");
 
echo file_get_contents(filename:"info.xml");

XML端

<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

1.注意:如果執(zhí)行結果有中文或者PHP中需要返回XML數據,那必須在PHP的文件內的頂部設置header(string:"content-type:text/xml;charset="utf-8");
2.xhr表示調用時傳來的異步對象
3.通過xhr.ressponseXML來獲取返回的數據
4.返回的是xml里的#document屏歹,可以使用DOM相關的方法來操作。

JSON

簡介

JSON:JavaScript 對象表示法(JavaScript Object Notation)之碗。
JSON 是存儲和交換文本信息的語法蝙眶。類似 XML。
JSON 比 XML 更小褪那、更快幽纷,更易解析。是輕量級的文本數據交換格式
JSON 獨立于語言
JSON 具有自我描述性博敬,更易理解

JSON 使用 JavaScript 語法來描述數據對象友浸,但是 JSON 仍然獨立于語言和平臺。JSON 解析器和 JSON 庫支持許多不同的編程語言偏窝。

該格式由 Douglas Crockford 提出收恢。
被設計用于可讀的數據交換。
它是從 JavaScript 腳本語言中演變而來祭往。
文件名擴展是 .json伦意。
JSON 的網絡媒體類型是 application/json。
統(tǒng)一標示符類型(Uniform Type Identifier)是 public.json硼补。

JSON 語法規(guī)則

  1. 在 JS 語言中驮肉,一切都是對象。因此已骇,任何支持的類型都可以通過 JSON 來表示离钝,例如字符串、數字褪储、對象卵渴、數組等。但是對象和數組是比較特殊且常用的兩種類型
  • 對象表示為鍵值對,數據由逗號分隔
  • 花括號保存對象,方括號保存數組
  1. JSON 鍵/值對
{"name": "Json"}
  1. JSON 與 JS 對象的關系
    JSON 是 JS 對象的字符串表示法乱豆,它使用文本表示一個 JS 對象的信息奖恰,本質是一個字符串。
var obj = {a: 'Hello', b: 'World'}; //這是一個對象宛裕,注意鍵名也是可以使用引號包裹的

var json = '{"a": "Hello", "b": "World"}'; //這是一個 JSON 字符串瑟啃,本質是一個字符串
  1. JSON 和 JS 對象互轉

要實現從JSON字符串轉換為JS對象,使用 JSON.parse() 方法:

var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //結果是 {a: 'Hello', b: 'World'}

要實現從JS對象轉換為JSON字符串揩尸,使用 JSON.stringify() 方法:

var json = JSON.stringify({a: 'Hello', b: 'World'}); //結果是 '{"a": "Hello", "b": "World"}'

案例
js中

window.onload = function(){
        var btn = document.querySelector(".btn");
        btn.onclick = function(){
            // 此處ajax是我自己封裝的ajax方法
            ajax({
                type:"GET",
                url:"ajax-json.php",
                success:function(xhr){          
                    console.log(xhr.ressponseText);                 
                },
                error:function(xhr){//xhr表示調用時傳來的異步對象
                    console.log(xhr.status);
                }
            });
        }
    } 

ajax-json.txt文件中

{
  "firstName": "Brett", "lastName": "McLaughlin"
}

ajax-json.php文件中

<?php 
echo file_get_contents(filename:"ajax-json.txt");//返回

操作返回的部分

success:function(xhr){          
  var str = xhr.ressponseText;
  var obj = JSON.parse(str);//轉成js對象
  console.log(obj);     //之后可以操作js對象
},

但是IE低級版本不支持parse方法蛹屿,得用個框架兼容:json2.js,可以去github下載岩榆。使用也很簡單错负。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末坟瓢,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子犹撒,更是在濱河造成了極大的恐慌折联,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件识颊,死亡現場離奇詭異诚镰,居然都是意外死亡,警方通過查閱死者的電腦和手機祥款,發(fā)現死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門清笨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人刃跛,你說我怎么就攤上這事抠艾。” “怎么了桨昙?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵检号,是天一觀的道長。 經常有香客問我绊率,道長谨敛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任滤否,我火速辦了婚禮脸狸,結果婚禮上,老公的妹妹穿的比我還像新娘藐俺。我一直安慰自己炊甲,他們只是感情好,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布欲芹。 她就那樣靜靜地躺著卿啡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪菱父。 梳的紋絲不亂的頭發(fā)上颈娜,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音浙宜,去河邊找鬼官辽。 笑死,一個胖子當著我的面吹牛粟瞬,可吹牛的內容都是我干的同仆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼裙品,長吁一口氣:“原來是場噩夢啊……” “哼俗批!你這毒婦竟也來了俗或?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤岁忘,失蹤者是張志新(化名)和其女友劉穎辛慰,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體干像,經...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡昆雀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了蝠筑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡揩懒,死狀恐怖什乙,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情已球,我是刑警寧澤臣镣,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站智亮,受9級特大地震影響忆某,放射性物質發(fā)生泄漏。R本人自食惡果不足惜阔蛉,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一弃舒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧状原,春花似錦聋呢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至毕莱,卻和暖如春器贩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背朋截。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工蛹稍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人质和。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓稳摄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饲宿。 傳聞我的和親對象是個殘疾皇子厦酬,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容