處理JSON時注意的相關問題進行說明描述
下面介紹說明處理JSON只是常規(guī)的文本數(shù)據(jù)所以在將數(shù)據(jù)發(fā)送到服務器時無需太費心,當決定使用 POST 請求將 JSON 數(shù)據(jù)發(fā)送給服務器時,并不需要對代碼進行大量更改,如下所示:
- var url = "organizePeople.php?timeStamp=" + new Date().getTime();
- request.open("POST", url, true);
- request.onreadystatechange = updatePage;
- request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- request.send(people.toJSONString());
這些代碼中的大部分,您都在 “ 掌握 Ajax,第 3 部分:Ajax 中的高級請求和響應” 中見過,應該比較熟悉,第 3 部分重點介紹了如何發(fā)送 POST 請求。請求使用處理JSON而非 GET 打開,而且 Content-Type 頭被設置為讓服務器預知它能得到何種數(shù)據(jù)。
在這種情況下,即為 application/x-www-form-urlencoded,它讓服務器知道現(xiàn)在發(fā)送的是文本,正如它從常規(guī)的 HTML 表單中得到的一樣。另一個簡單提示是 URL 的末尾追加了時間。
這就確保了請求不會在它第一次被發(fā)送后即緩存,而是會在此方法每次被調(diào)用后重新創(chuàng)建和重發(fā);此 URL 會由于時間戳的不同而稍微有些不同。這種技巧常被用于確保到腳本的 POST 每次都會實際生成新請求且 Web 服務器不會嘗試緩存來自服務器的響應。
不管使用 GET 還是 POST,關鍵之處在于 JSON 就只是文本。由于不需要特殊編碼而且每個服務器端腳本都能處理文本數(shù)據(jù),所以可以輕松利用 JSON 并將其應用到服務器。假如 JSON 是二進制格式的或是一些怪異的文本編碼,情況就不這么簡單了;幸好處理JSON只是常規(guī)的文本數(shù)據(jù)(正如腳本能從表單提交中所接收到的數(shù)據(jù),在 POST 段和 Content-Type 頭中亦可以看出),所以在將數(shù)據(jù)發(fā)送到服務器時無需太費心。#t#
一旦您編寫完客戶端 JavaScript 代碼、允許用戶與 Web 表單和 Web 頁的交互、收集發(fā)送給服務器端程序以做處理所需的信息,此時,服務器就成為了應用程序(如果調(diào)用了異步使用的服務器端程序,則可能是我們認為的所謂的 “Ajax 應用程序”)中的主角。
在此時,您在客戶端所做的選擇(比如使用 JavaScript 對象,然后將其轉(zhuǎn)換成 JSON 字符串)必須要與服務器端的選擇相匹配,比如使用哪個 API 解碼 JSON 數(shù)據(jù)。。。。。
不管在服務器端使用何種語言,在服務器端處理JSON 基本上就需要兩個步驟。
- 針對編寫服務器端程序所用的語言,找到相應的 JSON 解析器/工具箱/幫助器 API。
- 使用 JSON 解析器/工具箱/幫助器 API 取得來自客戶機的請求數(shù)據(jù)并將數(shù)據(jù)轉(zhuǎn)變成腳本能理解的東西。
以上處理JSON差不多就是目前所應了解的大致內(nèi)容了。接下來,我們對每個步驟進行較為詳細的介紹。