




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、服務器端的 JSON在 本系列最近發表的一篇文章中 ,您已經了解了如何將 JavaScript 對象轉變成 JSON 格式。這種格式 很容易用于發送(和接收與對象甚至對象數組對應的數據。在 本系列 的最后一篇文章中,您將會學習 如何處理以 JSON 格式發送到服務器的數據以及如何使用相同格式對腳本進行回復。JSON 的真正價值正如在 本系列上一篇文章 中所描述的那樣, JSON 是適用于 Ajax 應用程序的一種有效格式, 原因是它 使 JavaScript 對象和字符串值之間得以快速轉換。 由于 Ajax 應用程序非常適合將純文本發送給服務器 端程序并對應地接收純文本, 相比不能生成文本的
2、API, 能生成文本的 API 自然更可取; 而且, JSON 讓 您能夠處理本地 JavaScript 對象,而無需為如何表示這些對象多費心思。 developerWorks Ajax 資源中心 請訪問 Ajax 資源中心 , 這 是有關 Ajax 編程模型信 息的一站式中心,包括很多 文檔、教程、論壇、 blog 、 wiki 和新聞。任何關于 Ajax 的新信息都能在這里 找到。XML 也可以提供文本方面的類似益處,但用于將 JavaScript 對象轉換成 XML 的幾個現有 API 沒有 JSON API 成熟;有時,您必須在創建和處理 JavaScript 對象時格外謹慎以確保所進
3、行的處理能與所選用的 XML 會話 API 協作。 但對于 JSON, 情況就大不相同:它能處理幾乎所有可能的對象類型,并會返回給您一個非常好的 JSON 數據表示。因此, JSON 的最大價值在于可以將 JavaScript 真的 作為 JavaScript而非數據格式語言進行處理。 您所學到的所有有關使用 JavaScript 對象的技巧都可以應用到代碼中,而無需為如何將這些對象轉變成文本而多費心思。這之后,可以進行如下所示的簡單 JSON 方法調用:String myObjectInJSON =myObject.toJSONString(;現在就可以將結果文本發送給服務器了。回頁首將 J
4、SON 發給服務器將 JSON 發給服務器并不難, 但卻至關重要, 而且還有一些重要的選擇要做。 但是, 一旦決定使用 JSON, 所要做的這些選擇就會十分簡單而且數量有限,所以您需要考慮和關注的事情不多。重要的是能夠將 JSON 字符串發送給服務器,而且最好能做到盡快和盡可能簡單。通過 GET 以名稱 /值對發送 JSON將 JSON 數據發給服務器的最簡單方法是將其轉換成文本,然后以名稱 /值對的值的方式進行發送。請務 必注意, JSON 格式的數據是相當長的一個對象,看起來可能會如清單 1 所示:清單 1. JSON 格式的簡單 JavaScript 對象var people = &qu
5、ot;programmers": "firstName": "Brett", "lastName":"McLaughlin", "email": "brettnewI" , "firstName": "Jason", "lastName":"Hunter", "email": "jason" , "firstName": &qu
6、ot;Elliotte", "lastName":"Harold", "email": "elharo" , "authors": "firstName": "Isaac","lastName": "Asimov", "genre": "science fiction" , "firstName": "Tad", "l
7、astName": "Williams", "genre": "fantasy" , "firstName": "Frank","lastName": "Peretti", "genre": "christian fiction" , "musicians": "firstName": "Eric", "lastName": &
8、quot;Clapton", "instrument": "guitar" , "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" 如果要以名稱 /值對將其發送到服務器端,應該如下所示:var url = "organizePeople.php?people=" + people.toJSONString(;xml
9、Http.open("GET", url, true;xmlHttp.onreadystatechange = updatePage;xmlHttp.send(null;這看起來不錯,但卻存在一個問題:在 JSON 數據中會有空格和各種字符, Web 瀏覽器往往要嘗試對其 繼續編譯。要確保這些字符不會在服務器上(或者在將數據發送給服務器的過程中引起混亂,需要在 JavaScript escape(函數中做如下添加:var url = "organizePeople.php?people=" + escape(people.toJSONString( ;
10、request.open("GET", url, true;request.onreadystatechange = updatePage;request.send(null;該函數可以處理空格、斜線和其他任何可能影響瀏覽器的內容,并將它們轉換成 Web 可用字符(比如, 空格會被轉換成 %20,瀏覽器并不會將其視為空格處理,而是不做更改,將其直接傳遞到服務器。之后, 服務器會(通常自動再把它們轉換回它們傳輸后的本來 “ 面目 ” 。這種做法的缺點有兩個:在使用 GET 請求發送大塊數據時,對 URL 字符串有長度限制。雖然這個限制很寬泛,但對象 的 JSON 字符串表示的
11、長度可能超出您的想象,尤其是在使用極其復雜的對象時更是如此。 在跨網絡以純文本發送所有數據的時候,發送數據面臨的不安全性超出了您的處理能力。簡言之,以上是 GET 請求的兩個限制,而不是簡單的兩個與 JSON 數據相關的事情。在想要發送用戶 名和姓之外的更多內容,比如表單中的選擇時,二者可能會需要多加注意。若要處理任何機密或極長的內 容,可以使用 POST 請求。利用 POST 請求發送 JSON 數據當決定使用 POST 請求將 JSON 數據發送給服務器時,并不需要對代碼進行大量更改,如下所示:var url = "organizePeople.php?timeStamp=&qu
12、ot; + 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 中的高級請求和響應 ” 中見過,應該比較 熟悉,第
13、3 部分重點介紹了如何發送 POST 請求。請求使用 POST 而非 GET 打開,而且Content-Type 頭被設置為讓服務器預知它能得到何種數據。在這種情況下,即為application/x-www-form-urlencoded,它讓服務器知道現在發送的是文本,正如它從常規的 HTML 表 單中得到的一樣。另一個簡單提示是 URL 的末尾追加了時間。這就確保了請求不會在它第一次被發送后即緩存,而是會在 此方法每次被調用后重新創建和重發;此 URL 會由于時間戳的不同而稍微有些不同。這種技巧常被用于 確保到腳本的 POST 每次都會實際生成新請求且 Web 服務器不會嘗試緩存來自服務器
14、的響應。JSON 就只是文本不管使用 GET 還是 POST,關鍵之處在于 JSON 就只是文本。由于不需要特殊編碼而且每個服務器端 腳本都能處理文本數據,所以可以輕松利用 JSON 并將其應用到服務器。假如 JSON 是二進制格式的或 是一些怪異的文本編碼,情況就不這么簡單了;幸好 JSON 只是常規的文本數據(正如腳本能從表單提 交中所接收到的數據, 在 POST 段和 Content-Type 頭中亦可以看出 , 所以在將數據發送到服務器時 無需太費心。回頁首在服務器上解釋 JSON一旦您編寫完客戶端 JavaScript 代碼、 允許用戶與 Web 表單和 Web 頁的交互、 收集發送
15、給服務器端 程序以做處理所需的信息,此時,服務器就成為了應用程序(如果調用了異步使用的服務器端程序,則可 能是我們認為的所謂的 “Ajax 應用程序 ” 中的主角。在此時,您在客戶端所做的選擇(比如使用 JavaScript 對象, 然后將其轉換成 JSON 字符串 必須要與服務器端的選擇相匹配, 比如使用哪個 API 解碼 JSON 數據。處理 JSON 的兩步驟不管在服務器端使用何種語言,在服務器端處理 JSON 基本上就需要兩個步驟。1. 針對編寫服務器端程序所用的語言,找到相應的 JSON 解析器 /工具箱 /幫助器 API。2. 使用 JSON 解析器 /工具箱 /幫助器 API 取
16、得來自客戶機的請求數據并將數據轉變成腳本能理 解的東西。以上差不多就是目前所應了解的大致內容了。接下來,我們對每個步驟進行較為詳細的介紹。尋找 JSON 解析器尋找 JSON 解析器或工具箱最好的資源是 JSON 站點(有關鏈接,請參閱 參考資料 。在這里,除了 可以了解此格式本身的方方面面之外, 還可以通過各種鏈接找到 JSON 的各種工具和解析器, 從 ASP 到 Erlang ,到 Pike,再到 Ruby,應有盡有。您只需針對自己編寫腳本所用的語言下載相應的工具箱即可。 為了讓服務器端腳本和程序能夠使用此工具箱,可以根據情況對其進行選擇、擴展或安裝(如果在服務器 端使用的是 C#、 P
17、HP 或 Lisp,則可變性更大。例如,如果使用的是 PHP,可以簡單將其升級至 PHP 5.2 并用它完成操作;在 PHP 這個最新版本默認 包含了 JSON 擴展。實際上,那也是在使用 PHP 時處理 JSON 的最好方法。如果使用的是 Java servlet , 上的 org.json 包顯然就是個不錯的選擇。在這種情況下,可以從 JSON Web 站點 下載 json.zip 并將其中包含的源文件添加到項目構建目錄。編譯完這些文件后,一切就就緒了。對于所 支持的其他語言,同樣可以使用相同的步驟;使用何種語言取決于您對該語言的精通程度,最好使用您所 熟悉的語言。使用
18、JSON 解析器一旦獲得了程序可用的資源,剩下的事就是找到合適的方法進行調用。比如,假設為 PHP 使用的是 JSON-PHP 模板:/ This is just a code fragment from a larger PHP server-side scriptrequire_once('JSON.php'$json = new Services_JSON(;/ accept POST data and decode it$value = $json->decode($GLOBALS'HTTP_RAW_POST_DATA'/ Now work wit
19、h value as raw PHP通過該模板,可將獲得的所有數據(數組格式的、多行的、單值的或 JSON 數據結構中的任何內容轉 換成原生 PHP 格式,放在 $value變量中。如果在 servlet 中使用的是 org.json 包,則會使用如下代碼:public void doPost(HttpServletRequest request, HttpServletResponse response throws ServletException, IOException StringBuffer jb = new StringBuffer(;String line = null;try
20、 BufferedReader reader = request.getReader(;while (line = reader.readLine( != nulljb.append(line; catch (Exception e /report an error try JSONObject jsonObject = new JSONObject(jb.toString(; catch (ParseException e / crash and burnthrow new IOException("Error parsing JSON request string"/ Work with the data using methods like./ int someIn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中英語口語教學策略優化與實踐研究論文
- 花橋鎮干部管理制度
- 茶葉分公司管理制度
- 防聚集工作管理制度
- 財務會計崗位綜合實訓(一)
- 論壇營銷 - 網絡營銷系列之三
- 財務會計業務題
- 設備主管工作職責
- 山東省濱州市博興縣2024-2025學年九年級下學期4月期中考試數學試題(含部分答案)
- 紅白色創意筆刷西藏旅游介紹
- 2023年江蘇省鹽城市大豐區部分事業單位招聘專職安監人員8人(共500題)筆試必備質量檢測、歷年高頻考點模擬試題含答案解析
- EXCEL常用函數的教程課件
- 湖北省武漢市江漢區2022-2023學年三年級下學期期末數學試卷
- 井下變電所檢修高爆開關施工安全技術措施
- 廣東省廣州市白云區2022-2023學年數學六年級第二學期期末質量檢測試題含解析
- 醫療設備、醫用耗材管理制度培訓講座
- 導游基礎知識(中職)全套PPT教學課件
- 魅力臺州優質獲獎課件
- ZZ028 中職法律實務賽項賽題-2023年全國職業院校技能大賽擬設賽項賽題完整版(10套)
- 電動剪刀式升降車作業風險辨識及控制措施清單
- 巨力索具(河南)有限公司年生產10萬噸鋼絲及5萬噸鋼絲繩項目環境影響報告
評論
0/150
提交評論