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