Ajax和WEB服務數據格式:自定義返回格式
這是這一系列的最后一篇文章了,前面我們講到了XML,SOAP,HTM格式和第二部分的JSON和JSONP。現在我們來看看自定義數據格式。
最佳的數據傳輸格式應該是使用最少的傳輸量表達最需要的數據。想想之前在XML和JSON中定義的書的數據。我們每一本書包含6條數據,所以我們可以簡單的按照下面的格式來寫:
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的:
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的數據格式有一些幫助。