Это последняя статья в серии, посвященная форматам данных веб-сервисов для Ajax. Часть 1 рассмотрела XML, SOAP и HTML, а часть 2 — JSON и JSONP . Сегодня мы смотрим на пользовательские форматы данных.
Наиболее эффективные форматы передачи данных используют минимальное количество структурных элементов для разграничения данных. Рассмотрим данные нашей книги в формате XML и JSON . Мы всегда ожидаем шесть элементов данных в каждой книге, поэтому мы могли бы просто использовать такой формат, как:
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 может обрабатывать данные очень быстро — даже если возвращаются тысячи книг. В большинстве случаев вы обнаружите, что общее время загрузки и анализа данных меньше, чем эквивалентный код Ajax на основе JSON.
Пользовательский формат данных предлагает несколько преимуществ:
- Это самый легкий формат, который позволяет быстрее получать ответы Ajax.
- Данные могут быть сгенерированы быстро любым сервером на языке без дополнительных библиотек форматирования.
- Нелегко создать вредоносную полезную нагрузку.
Но обратите внимание на недостатки:
- Это может не быть жизнеспособным решением, если количество свойств объекта не согласовано. Например, предположим, что в наших книгах указаны дополнительные URL-адреса PDF или цены в разных валютах. Нам могут потребоваться дополнительные разделители, и наш анализ станет более сложным.
- Ваш веб-сервис может быть более ограниченным по объему, чем тот, который возвращает XML или JSON. Это не будет проблемой, если вы пишете сервисы для своих собственных приложений, но стоит подумать о том, собираетесь ли вы публиковать данные для третьих сторон.
- Пользовательский анализатор должен быть написан для каждого типа ответа на данные.
- Данные не обязательно читаются человеком.
- Вы должны быть абсолютно уверены, что символы-разделители не отображаются в исходных данных. Вы можете проверить их наличие или рассмотреть возможность использования разделителей в начале набора символов ASCII.
Я надеюсь, что эта серия статей предоставила вам несколько вариантов форматирования данных Ajax. Вы использовали другие форматы данных?