轉(zhuǎn)帖|其它|編輯:郝浩|2011-04-22 15:09:48.000|閱讀 452 次
概述:這是這一系列的最后一篇文章了,前面我們講到了XML,SOAP,HTM格式和第二部分的JSON和JSONP。現(xiàn)在我們來看看自定義數(shù)據(jù)格式。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
這是這一系列的最后一篇文章了,前面我們講到了XML,SOAP,HTM格式和第二部分的JSON和JSONP。現(xiàn)在我們來看看自定義數(shù)據(jù)格式。
最佳的數(shù)據(jù)傳輸格式應(yīng)該是使用最少的傳輸量表達最需要的數(shù)據(jù)。想想之前在XML和JSON中定義的書的數(shù)據(jù)。我們每一本書包含6條數(shù)據(jù),所以我們可以簡單的按照下面的格式來寫:
The Principles of Beautiful Web Design, 2nd Edition;
//www.sitepoint.com/books/design2/;Jason Beaird;SitePoint;39.95;USD
jQuery: Novice to Ninja;//www.sitepoint.com/books/jquery1/;
JEarle Castledine & Craig Sharkie;SitePoint;29.95;USD
Build Your Own Database Driven Website;
//www.sitepoint.com/books/phpmysql4/;Kevin Yank;SitePoint;39.95;USD
我們的數(shù)據(jù)現(xiàn)在看起來跟分號分隔的列表差不多了。我們使用回車來區(qū)分每一本書,通過分號來區(qū)分書中的每一項內(nèi)容,這個分隔符必須謹(jǐn)慎的選擇,不選擇逗號因為可能書名中出現(xiàn)逗號。
跟JSON不同,對于自定義的數(shù)據(jù)格式,我們必須得自己來解析返回的字符串,不過這個通過JavaScript自帶的split()方法可以輕松完成。下面的代碼就是將我們自定義的數(shù)據(jù)格式轉(zhuǎn)換成為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可以很快的處理這些數(shù)據(jù)–即使是一千本書的數(shù)據(jù)。大多數(shù)情況下,你會發(fā)現(xiàn)下載和處理數(shù)據(jù)的時間遠小于同樣的基于JSON的異步請求的時間。
自定義的數(shù)據(jù)格式有下面這些好處:
1、很輕量級的數(shù)據(jù),傳輸比較快。
2、在服務(wù)器端,不需要額外的東西就能很快很方便生成。
3、用這種格式構(gòu)造惡意代碼就很困難了。
當(dāng)然也有他的不好處:
1、對于那種格式不一定的數(shù)據(jù)就不太方便了。比如,我們的書籍信息由可選的PDF的下載鏈接和下載價格,這樣的話,處理的程序邏輯就比較復(fù)雜了。
2、你的服務(wù)可能比使用JSON和XML更加受到限制,如果你是自己在使用這個服務(wù),那么問題不大,如果考慮到第三方使用的話,就不方便了。
3、需要為每一種的數(shù)據(jù)格式寫處理的函數(shù)。
4、這樣的數(shù)據(jù)可讀性就比較差了。
5、還要確定分隔符不會出現(xiàn)在數(shù)據(jù)中間。需要在讀取的時候就做一些處理。
希望這一系列的文章對于大家認識Ajax的數(shù)據(jù)格式有一些幫助。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載