******* 向伺服器取得多項資料─使用 JSON *******

後端除了可以利用 XML 傳送多項資料回前端之外,還可以使用 JSON
JSON 就是 Javascript 的物件

Javascript 的物件可以使用 new Object(){} 來建立,
使用 new Object() 先建立物件後,再一項一項加入各 propertymethod
例如:


var man=new Object();
man.name="Terry";
man.age=30;
man.phones=["0212345678","0982123456"];
man.say=function(voice){ alert(voice); };

上述資料以 {} 的寫法可以直接指定初始值,各項名值對用逗號(,)隔開如下:


var man=
    {
      "name":"Terry",
      "age":30,
      "phones":["0212345678","0982123456"],
      "say":function(voice){ alert(voice); }
    }

看起來和 CSS 的寫法相當類似。
Javascript 物件只設定屬性的話,就像是一群名值對的資料(關聯式陣列或者雜湊),
適合用來在前後端之間傳遞多項資料。

若想從後端傳遞 JSON,只要依照 Javascript 物件的格式,
將資料包裝成以大括號 {} 包以來的名值對字串,再傳給前端就可以了。
前端則是用 request.responseText 接收 JSON 字串(純文字),
然後使用 Javascript 的 eval() method 將字串轉成敘述,
使用方式如下:


var profile_string=request.responseText;
var profile=eval("("+profile_string+")");

eval 的引數中用括號 () 將字串包起來,是因為要將整個字串當成一整組,
若是沒有加上這一組括號,則 eval 會出現錯誤(在 IE 上是如此);

由於直接使用 eval 轉述所接收的字串,可能會有安全上的問題
因此通常會先將接收到的字串經過特別處理之後再傳給 eval 轉譯。
JSON 官網提供兩個 json 檔案,一個用來將 Javascript 物件轉成字串(json.js),
一個用來將字串經過特別處理之後轉成 Javascript 物件(json2.js)
可以分別從 http://www.json.org/json.jshttp://www.json.org/json2.js 取得。

json.js 中的 object.toJSONString() 可將 Javascript 物件轉成字串。
先將要傳給後端的多項資料加入 Javascript 物件之後,再呼叫 obj.toJSONString(),
然後將轉換後的字串加入 request.open 的 url 引數後方(使用 GET method),
或將轉換後的字串傳入 request.send 當引數(使用 POST method)。

json2.js 中的 JSON.parse(String str)可將後端傳來的字串轉成 Javascript 物件。
它會先將收到的字串進行一些特別的處理之後,再用 eval() 轉譯處理過後的字串,
以避免一些不安全的操作發生。

常見的後端系統如 JSP、PHP、ASP.net 等通常都有將 JSON 字串轉成該程式物件的方法,
PHP 5.2 以後的版本,可以直接使用 json_encode 來將 PHP 物件轉成 JSON 字串,
也可以使用 json_decode 將 JSON 字串轉成 PHP 物件或陣列。
透過前端的 obj.toJSONString()JSON.parse(String str)
以及後端的各種 JSON 處理程式一起運作的話,
使用 JSON 在前後端之間傳遞資料會變得相當方便。