JavaScript. Подробное руководство, 6-е издание, стр. 281
<b>* HTML-формы, с использованием формата application/x-www-form-urlencoded */</b><b>function encodeFormData(data) {</b><b> if (!data) return // Всегда возвращать строку</b><b> var pairs = []; // Для пар имя/значение</b><b> for(var name in data) { // Для каждого имени</b><b> if (!data.hasOwnProperty(name)) continue; // Пропустить унаслед. </b><b> if (typeof data[name] === "function") continue;// Пропустить методы</b><b> var value = data[name].toString(); // Знач, в виде строки</b><b> name = encodeURIComponent(name.replace(”%20”, "+”)); // Кодировать имя</b><b> value = encodeURIComponent(value.replace("%20". "+")); // Кодировать значение</b><b> pairs.push(name + "=” + value); // Сохранить пару имя/значение</b><b> }</b><b> return pairs.join('&’); // Объединить пары знаком & и вернуть</b><b>}</b>С помощью этой функции
<b>encodeFormData()</b><b>postData(),</b><b>postData()</b><b>XMLHttpRequest</b>Пример 18.5. Выполнение запроса HTTP POST с данными в формате представления форм
<b>function postData(url, data, callback) {</b><b> var request = new XMLHttpRequest();</b><b> request.open("POST", url); // Методом POST на указ, url</b><b> request.onreadystatechange = function() { // Простой обработчик</b><b> if (request.readyState === 4 && callback) // При получении ответа</b><b> callback(request); // вызвать указанную функцию</b><b> };</b><b> request.setRequestHeader("Content-Type", // Установить "Content-Type"</b><b> "application/x-www-form-urlencoded");</b><b> request.send(encodeFormData(data)); // Отправить данные</b><b>} // в представлении форм</b>Данные формы также могут быть отправлены посредством GET-запроса, и когда цель формы состоит в том, чтобы определить параметры операции чтения, метод GET лучше соответствует назначению формы, чем метод POST. GET-запросы не имеют тела, поэтому «полезный груз» с данными формы отправляется серверу в виде строки запроса в адресе URL (следующей за знаком вопроса). Утилита
<b>encodeFormData()</b>Пример 18.6. Выполнение GET-запроса с данными в формате представления форм
<b>function getData(url, data, callback) {</b><b> var request = new XMLHttpRequest();</b><b> request.open("GET", url + // Методом GET на указанный url</b><b> "?" + encodeFormData(data)); // с добавлением данных</b><b> request.onreadystatechange = function() { // Простой обработчик событий</b><b> if (request.readyState === 4 && callback) callback(request);</b><b> };</b><b> request.send(null); // Отправить запрос</b><b>}</b>Для добавления данных в URL-адреса HTML-формы используют строки запросов, но использование объекта
<b>XMLHttpRequest</b>При наличии соответствующей поддержки на сервере наш запрос на поиск пиццерии можно оформить в виде более удобочитаемого URL-адреса, такого как показано ниже:
<a href="http://restaurantfinder.example.com/02134/1km/pizza"><b>http://restaurantfinder.example.com/02134/1km/pizza</b></a>18.1.3.2. Запросы с данными в формате JSON
Использование формата представления данных форм в теле POST-запросов является распространенным соглашением, но не является обязательным требованием протокола HTTP. В последние годы в роли формата обмена данными во Всемирной паутине все большей популярностью пользуется формат JSON. Пример 18.7 демонстрирует, как с помощью функции
<b>JSON.stringifу()</b>Пример 18.7. Выполнение запроса HTTP POST с данными в формате JSON
<b>function postJS0N(url, data, callback) {</b><b> var request = new XMLHttpRequest():</b><b> request.open("POST”, url); // Методом POST на указ, url</b><b> request.onreadystatechange = function() { // Простой обработчик</b><b> if (request.readyState === 4 && callback) // При получении ответа</b><b> callback(request): // вызвать указанную функцию</b><b> };</b><b> request.setRequestHeader("Content-Type", "application/json");</b>