Ajax和WEB服務數據格式:自定義返回格式

作者: rockux  發布時間: 2011-04-19 11:17  閱讀: 1922 次  推薦: 0   原文鏈接   [收藏]  

  這是這一系列的最后一篇文章了,前面我們講到了XML,SOAP,HTM格式和第二部分的JSON和JSONP。現在我們來看看自定義數據格式。

  最佳的數據傳輸格式應該是使用最少的傳輸量表達最需要的數據。想想之前在XML和JSON中定義的書的數據。我們每一本書包含6條數據,所以我們可以簡單的按照下面的格式來寫:

 
The Principles of Beautiful Web Design, 2nd Edition;http://www.sitepoint.com/books/design2/;Jason Beaird;SitePoint;39.95;USD
jQuery: Novice to Ninja;http://www.sitepoint.com/books/jquery1/;JEarle Castledine & Craig Sharkie;SitePoint;29.95;USD
Build Your Own Database Driven Website;http://www.sitepoint.com/books/phpmysql4/;Kevin Yank;SitePoint;39.95;USD

  我們的數據現在看起來跟分號分隔的列表差不多了。我們使用回車來區分每一本書,通過分號來區分書中的每一項內容,這個分隔符必須謹慎的選擇,不選擇逗號因為可能書名中出現逗號。

  跟JSON不同,對于自定義的數據格式,我們必須得自己來解析返回的字符串,不過這個通過JavaScript自帶的split()方法可以輕松完成。下面的代碼就是將我們自定義的數據格式轉換成為JSON的:

 
// convert custom data to an array of JavaScript objects
function ParseBookData(ajaxdata) {
var book = [], bookData = ajaxdata.split("\n"), bookItem;
for (var b=0, bl=bookData.length; b < bl; b++) {
bookItem
= bookData[b].split(";");
book[b]
= {
title: bookItem[
0],
url: bookItem[
1],
author: bookItem[
2],
publisher: bookItem[
3],
price: {
amount: parseFloat(bookItem[
4]),
currency: bookItem[
5]
}
};
}

return book;
}

var book = ParseBookData(xhr.responseText);
alert(book[
0].title); // first book title
alert(book[1].url); // second book URL

  JavaScript可以很快的處理這些數據–即使是一千本書的數據。大多數情況下,你會發現下載和處理數據的時間遠小于同樣的基于JSON的異步請求的時間。

  自定義的數據格式有下面這些好處:

  1、很輕量級的數據,傳輸比較快。
  2、在服務器端,不需要額外的東西就能很快很方便生成。
  3、用這種格式構造惡意代碼就很困難了。

  當然也有他的不好處:

  1、對于那種格式不一定的數據就不太方便了。比如,我們的書籍信息由可選的PDF的下載鏈接和下載價格,這樣的話,處理的程序邏輯就比較復雜了。
  2、你的服務可能比使用JSON和XML更加受到限制,如果你是自己在使用這個服務,那么問題不大,如果考慮到第三方使用的話,就不方便了。
  3、需要為每一種的數據格式寫處理的函數。
  4、這樣的數據可讀性就比較差了。
  5、還要確定分隔符不會出現在數據中間。需要在讀取的時候就做一些處理。

  看看前面的文章:

  Ajax和WEB服務數據格式:XML SOAP HTML
  Ajax和WEB服務數據格式:JSON JSONP

  希望這一系列的文章對于大家認識Ajax的數據格式有一些幫助。

0
0
 
標簽:Ajax web json jsonp
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()