Каталог статей
Поиск по базе статей  
Статья на тему Интернет » Интересное в сети » Работаем с&nb p;формами в&nb p;AJAX

 

Работаем с&nb p;формами в&nb p;AJAX

 

 

Итак, какая задача стоит перед нами? Во-первых, нужно создать саму форму, которую будет заполнять гипотетический посетитель нашего веб-сайта. Во-вторых, необходимо написать ряд JavaScript-функций, которые будут обрабатывать форму и данные из нее, а затем посылать на сервер. И, наконец, третий момент — серверная часть, которая в нашем случае будет написана на PHP. Разумеется, для упрощения мы сделаем серверную часть максимально короткой, а с расширением ее при желании проблем возникнуть точно не должно.

загрузка...

 

 

Кроме того, в JavaScript-код мы добавим функциональность для базовой проверки, которая, к примеру, позволит скрипту определять, были ли заполнены обязательные для заполнения поля. Сей механизм завязан на различных типах элементов формы, поэтому теоретически и практически с таким подходом разработчик может выбирать для текстового поля либо radio button или любого другого элемента различные виды обработки и так далее. И самое важное — полное разделение всех логик решения, что позволит намного повысить его гибкость.

HTML

В AJAX очень важна гибкость решенийНачинать можно с любой из трех обозначенных выше частей, но мы начнем с описания самой формы. Возможно, это не самый лучший вариант, но для статьи он подходит: будем двигаться от более простого к более сложному. Также мы оставим за бортом материала любой HTML-код, кроме того, который будет играть хоть какую-то роль в примере.

<form>
Велосипед:
<input name="radiobutton" type="radio" value="bicycle">
Машина:
<input name="radiobutton" type="radio" value="car">
Самолет:
<input name="radiobutton" type="radio" value="airplane">
Имя (обязательно для заполнения):
<input type="text" name="txtName" title="required">
Фамилия:
<input type="text" name="txtSurname">

<select name="selectYesNo">
<option value="selectedYes">Да</option>
<option value="selectedNo">Нет</option>
</select>

<input type="button" value="go" onClick="sendRequest(this.form, 'process.php')">
</form>
<div id="results" />

Рассмотрим код. Первыми у нас идут три элемента radio button для значений «Велосипед», «Машина» и «Самолет». Затем следуют два текстовых поля для ввода имени и фамилии пользователя. Обращу внимание здесь на поле с именем txtName. Его атрибут title имеет значение required; это понадобится нам во время валидации формы. Иными словами, пользователь не сможет отправить данные на сервер, пока оно не будет заполнено.

В конце же формы есть выпадающий список с двумя вариантами «Да» и «Нет» и кнопка, которая по нажатии вызывает JavaScript-функцию под названием sendRequest. Она посылает данные, полученные из формы, на сервер, но детально мы об этом поговорим чуть позже. А пока хочу обратить внимание на самую последнюю строчку кода. Это контейнер для отображения полученных с сервера результатов. Какими именно они будут, определяет PHP-скрипт, о котором пойдет речь дальше.

PHP

Поскольку наш материал ориентирован именно на разбор AJAX-функционала, связанного с обработкой форм, то серверной части мы уделим наименьшее внимание. В качестве примера используется сильно урезанный и упрощенный PHP-код, который берет данные формы, переданные JavaScript-функцией, и возвращает их уже отформатированными согласно указанному виду. Замечу, что на данной стадии мы на самом деле можем делать с ними все, что требуется.

if(isset($_GET['rnd982g'])) {
foreach($_GET as $a => $b) {
if($a == "rnd982g") {
// пропускаем случайное число, которое используется только
// для предотвращения автоматического кеширования браузером
} else {
echo "<b>$a</b>: ".stripslashes(htmlentities($b))."";
} // if
} //foreach
die;
}

Думаю, смысла разбирать каждую строчку кода нет смысла. Однако посмотрим на него в целом, остановившись на случайном числе, которое мы используем исключительно для предотвращения автоматического кеширования данных веб-браузером. Без включения в код этого момента велик риск сбоев во время передачи информации от клиента на сервер, и в главе материала, посвященной JavaScript-части, мы еще раз на нем остановимся. Также, как видно из примера, наше решение построено так, что PHP-часть очень легко расширяется. К примеру, мы совершенно безболезненно можем добавить в нее код для отправки электронного уведомления или для добавления полученной информации в базу данных. Сейчас же скрипт на серверной стороне просто выводит результат, который затем транслируется в упомянутом выше контейнере div.

JavaScript

JavaScript-часть в нашем решении состоит всего из 4 функцийСамое важное в рамках сегодняшнего материала — это, пожалуй, JavaScript-часть. Она состоит всего из четырех не слишком сложных функций, которые отвечают за все необходимое. Разбираться с ними мы будем по порядку. Первой идет функция, которая отвечает за создания объекта XMLHttpRequest. Здесь все в целом достаточно тривиально: в зависимости от веб-браузера пользователя скрипт выбирает соответствующий вариант работы. Больше эта функция ничего не делает.

function createXMLHttpRequest() {
var xhr;
if(window.XMLHttpRequest) { // если используется браузер, отличный от Microsoft Internet Explorer
try {
xhr = new XMLHttpRequest();
} catch(e) {
xhr = false;
}
} else if(window.ActiveXObject) { // если используется Microsoft Internet Explorer
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
xhr = false;
}
}
return xhr;
}

Однако простого описания функции недостаточно. В самое начало JavaScript-кода (это будет, скорее всего, внешний подключаемый файл) еще необходимо добавить следующую строку.

var x_request = createXMLHttpRequest();

Таким образом, объект XMLHttpRequest будет создаваться автоматически, как только внешний JavaScript-файл будет загружен. Идем дальше.

function getForm(fobj) {
var str = "";
var ft = "";
var fv = "";
var fn = "";
var els = "";
for(var i = 0;i < fobj.elements.length;i++) {
els = fobj.elements[i]; // текущий элемент
ft = els.title; // title элемента
fv = els.value; // value элемента
fn = els.name; // name элемента
switch(els.type) { // обрабатываем данные согласно типу элемента
case "text":
case "hidden":
case "password":
case "textarea":
// проверяем, обязательно ли это поле для заполнения или нет
if(encodeURI(ft) == "required" && encodeURI(fv).length < 1) {
alert('''+fn+'' is a required field, please complete.');
els.focus();
return false;
}
str += fn + "=" + encodeURI(fv) + "&";
break;

case "checkbox":
case "radio":
if(els.checked) str += fn + "=" + encodeURI(fv) + "&";
break;

case "select-one":
str += fn + "=" +
els.options[els.selectedIndex].value + "&";
break;
} // switch
} // for
str = str.substr(0,(str.length - 1));
return str;
}

Функция под названием getForm очень тесно связана с функцией sendRequest, которая идет следом. getForm осуществляет обработку данных. Другими словами, она вначале берет информацию из всей формы, а затем последовательно обрабатывает ее в соответствии с инструкциями внутри switch. Мы не стали писать их для каждого типа, ограничившись textarea, checkbox и select-one. К слову, именно в рамках обработки textarea мы и проверяем упомянутую выше необходимость заполнения того или иного текстового поля (имеет ли атрибут title значение required).

Затем обработанные данные возвращаются в функцию sendRequest, основная задача которой отправка информации на сервер. Она привязана в HTML-коде к кнопке.

function sendRequest(frm, file) {
var rnd982g = Math.random();
var str = "";
if(str = getForm(frm)) {
x_request.open('GET', file+'?'+str+'&rnd982g='+rnd982g);
x_request.onreadystatechange = handleResponse;
x_request.send(null);
}
return false;
}

Валидацию получаемых данных лучше выносить в отдельную функциюДля нормальной работы функции sendRequest требуется два параметра: frm (форма, которая обрабатывается) и file (путь к файлу на серверной стороне). Когда функция вызывается, она берет объекты формы и посылает его в функцию getFrom, где, как мы уже видели, идет обработка данных, после чего они (данные) возвращаются обратно. Затем функция sendRequest использует уже открытое AJAX-соединение (функция createXMLHttpRequest и объект x_request) для того, чтобы передать обработанные данные на сервер указанному файлу (параметр file).

Последняя функция — это handleResponse. В нее передаются уже данные, полученные с сервера.

function handleResponse() {
if(x_request.readyState == 4) {
var response = x_request.responseText;
document.getElementById("results").innerHTML = response;
}
}

Здесь все еще проще, чем в предыдущих функциях. Скрипт берет данные и добавляет их в контейнер results. Разумеется, в материале мы рассмотрели лишь самый базовый функционал, связанный с процессингом и парсингом форм в AJAX, — условно говоря, скелет. Не особо напрягая фантазию, можно придумать, как имеет смысл расширить каждую из частей до вполне комплексного решения.



Статья получена: hostinfo.ru

загрузка...

 

 

Наверх


Постоянная ссылка на статью "Работаем с&nb p;формами в&nb p;AJAX":


Рассказать другу

Оценка: 4.0 (голосов: 16)

Ваша оценка:

Ваш комментарий

Имя:
Сообщение:
Защитный код: включите графику
 
 



Поиск по базе статей:





Темы статей






Новые статьи

Противовирусные препараты: за и против Добро пожаловать в Армению. Знакомство с Арменией Крыша из сэндвич панелей для индивидуального строительства Возможно ли отменить договор купли-продажи квартиры, если он был уже подписан Как выбрать блеск для губ Чего боятся мужчины Как побороть страх перед неизвестностью Газон на участке своими руками Как правильно стирать шторы Как просто бросить курить

Вместе с этой статьей обычно читают:

Mitsu L200: слава должна работать!

Спору нет, старый Mitsubishi L200 был куда как выдающимся пикапом – по сути, именно ему удалось приучить европейцев к мысли о допустимости поездок на считавшимся чисто американском транспорте. А кое-где (например, в России), L200, несмотря на почтенный возраст, продолжает укладывать молодых соперников на обе лопатки с методичностью парового катка. Теперь на смену заслуженному бойцу приходит L200 нового поколения.

» Японские автомобили - 2376 - читать


Ford Ka работает во всех направлениях

Миллионный Ford Ка, произведенный в Европе, сошел с конвейера на автомобильном заводе Ford в Валенсии. Впервые Ka был представлен 6 лет назад на автосалоне в Париже. Интересно, что более 65% покупателей нового Ка не владели раньше автомобилем марки Ford .

» Немецкие автомобили - 1823 - читать


Как работает автомобильная навигация

Лекарство от "пространственного кретинизма" уже давно изобретено. Бортовая автомобильная навигация перестала быть экзотикой и устанавливается даже на автомобили класса "С" Систему автомобильной навигации вполне можно представить себе в виде обычного офисного компьютера. Только вот основные элементы - дисплей, клавиатура и процессор с дисководом для DVD-дисков - разбросаны по всему корпусу автомобиля.

» Немецкие автомобили - 3708 - читать


Как работает полный привод

В последние годы во всем мире наблюдается стойкая тенденция увеличения спроса на полноприводные машины. Например, компания Audi в этом году продала миллионный полноприводный автомобиль. Однако, современные полноприводные автомобили, в большинстве случаев, становятся таковыми только когда под колесами оказывается скользкое покрытие.

» Немецкие автомобили - 5694 - читать


Как работает система помощи при парковке

Известную шоферскую шутку "не видно -- будет слышно" можно считать инструкцией к любому "парктронику". Улучшение аэродинамики и внешнего вида автомобиля зачастую ведет к ухудшению обзорности, особенно сзади. А покатые капот и багажник лишают водителя возможности оценить габариты машины.

» Немецкие автомобили - 4881 - читать


Диагностика работы двигателя по состоянию свечей

Свечи зажигания эти простые на вид соединения металла и керамики являются важнейшим элементом в работе двигателя. Даже по внешнему виду свечи можно многое сказать как о работе двигателя в целом, так и об отдельных его узлах. Осмотр свечи нужно проводить после продолжительной работы двигателя, идеальным вариантом будет осмотр свечи после длительной поездки по загородному шоссе.

» Разное - 4882 - читать



Статья на тему Интернет » Интересное в сети » Работаем с&nb p;формами в&nb p;AJAX

Все статьи | Разделы | Поиск | Добавить статью | Контакты

© Art.Thelib.Ru, 2006-2024, при копировании материалов, прямая индексируемая ссылка на сайт обязательна.

Энциклопедия Art.Thelib.Ru