css, html, php, javascript, jQuery, ajax … – решения, примеры, рецепты
11 Мар
Плагин jQuery Form позволяет не только сделать новые ajax-формы, но и довольно просто «проапгрейдить» уже существующие формы таким образом, чтобы их можно было использовать вместе с Ajax. Основные методы, ajaxForm и ajaxSubmit, собирают информацию из элементов формы, поддерживают многочисленные опции, использование которых даст полный контроль над передачей данных.
Итак, начнем. Нам потребуется подключить к странице два файла: библиотеку jQuery и файл jquery.form.js. Сделаем это в разделе HEAD.
<script type="text/javascript" src="js/jquery-1.2.1.js"></script> <script type="text/javascript" src="js/jquery.form.js"></script>
Затем создадим самую простейшую форму, не содержащую какой-либо специальной разметки:
<form id="myForm" action="comment.php" method="post"> Имя: <input type="text" name="name" /> Комментарий: <textarea name="comment"></textarea> <input type="submit" value="Комментировать" /> </form>
и добавим еще немного javascript:
<script type="text/javascript">
$(document).ready(function(){
$("#myForm").ajaxForm(function() {
alert("Спасибо за комментарий!");
});
});
</script>
Вот так просто, но поспешу Вас разочаровать – то, что мы сделали, из серии «пыль в глаза». Объясню почему. Когда мы нажмем кнопку «Комментировать» значения полей name и comment будут переданы методом POST файлу comment.php. Если сервер вернет успешный ответ (т.е. всего лишь код 200) – пользователь увидит сообщение «Спасибо за комментарий!».
Эффектнее было бы не выводить сообщение в alert(), а вставить сообщение непосредственно в DOM.
Так что все, что мы здесь выиграли – избавились от перезагрузки страницы, в принципе уже неплохо, но хотелось бы большего…
Но давайте сначала попробуем выяснить, в чем его отличие метода ajaxForm от метода ajaxSubmit. Оба метода либо не принимают аргументов, либо принимают один аргумент, который может быть или функцией или объектом (в парах ключ/значение могут быть переданы различные опции).
Первое отличие состоит в том, что метод ajaxSubmit отправляет данные из формы, а метод ajaxForm – нет. Когда вызывается метод ajaxSubmit он упорядочивает данные формы в строку запроса и отправляет их серверу. Когда же вызывается метод ajaxForm – он только добавляет необходимое событие в форму таким образом, что можно определить, когда пользователь отправил данные.
Второе отличие: при использовании ajaxForm передаваемые значения будут включать пару имя/значение для самой кнопки (как в примере, или координаты клика мышью, если используется картинка).
Вывод: это не значит, что метод ajaxForm – плохой, а метод ajaxSubmit – хороший. Просто они разные. И какой именно метод использовать – надо решать в каждом конкретном случае.
Давайте теперь познакомимся с доступными опциями, которые принимают оба этих метода. Посмотрим фрагмент кода, чтобы увидеть как задаются опции:
// готовим объект
var options = {
target: "#divToUpdate",
url: "form.php",
success: function() {
alert("Спасибо за комментарий!");
}
};
// передаем опции в ajaxSubmit
$("#myForm").ajaxSubmit(options);
target – идентифицирует тот элемент (или элементы) на странице, который должен быть обновлен при поступлении ответа от сервера. Значение может быть определено как объект или селектор jQuery или элемент DOM. Значение по умолчанию – null.
url – URL, куда должны быть переданы данные из формы. Значение по умолчанию – значение атрибута action формы.
type – метод, с помощью которого должны быть отправлены данные из формы (GET или POST). Значение по умолчанию – значение атрибута method формы. Если атрибут не определен, используется метод GET.
beforeSubmit – функция, которая будет вызвана до отправки данных из формы. Функция, вызываемая тут, может позволить выполнить какие-либо действия до отправки данных, например проверку введенных данных. И если она возвращает false – данные не будут отправлены на сервер. Принимает три аргумента: массив с данными формы, jQuery-объект формы, объект из опций определенных в ajaxForm/ajaxSubmit. Массив данных формы принимает такой вид:
[ { name: "username", value: "Vasya" },
{ name: "password", value: "secret" } ]
Значение по умолчанию – null.
success – функция, которая будет вызвана после отправки данных серверу и при условии успешного ответа сервера. Полученные данные – или responseText или responseXML, в зависимости от значения опции dataType. Значение по умолчанию – null.
dataType – определяет ожидаемый тип данных в ответе сервера. Может принимать значения: null, «xml«, «script«, или «json«. Опция позволяет точно определить, как именно должен быть обработан ответ сервера.
- «xml»: if dataType == «xml» ответ сервера рассматривается как XML и в success (если опция определена) отправляется значение responseXML;
- «json»: if dataType == «json» ответ сервера будет выполнен и передан в success (если опция определена);
- «script»: if dataType == «script» ответ сервера будет выполнен в глобальном контексте;
Значение по умолчанию – null.
semantic – флаг, определяющий должны ли данные передаваться в строгом порядке следования (это происходит медленнее).
Упорядочивание данных формы происходит в порядке следования элементов, исключая элементы input, имеющие тип image.
Вы должны всего лишь установить эту опцию в true, если Ваш сервер требует строгого порядка следования И форма содержит элементы input типа image. Значение по умолчанию – false.
resetForm – флаг, определяющий должна ли форма быть сброшена если передача данных была успешной. Значение по умолчанию – null.
clearForm – флаг, определяющий должна ли форма быть очищена если передача данных была успешной. Значение по умолчанию – null.
Методы ajaxForm и ajaxSubmit не единственные. Давайте немного познакомимся с остальными.
Метод formSerialize – упорядочивает данные из элементов формы в строку запроса. Метод возвращает строку в формате: name1=value1&name2=value2.
var qString = $("#myFormId").formSerialize();
// теперь данные могут быть отправлены
// через $.get, $.post, $.ajax, и т.д.
$.post("myscript.php", qString);
Метод fieldSerialize – упорядочивает данные из элементов формы в строку запроса. Удобно применять, когда требуется упорядочить в строку запроса только часть данных из формы. Метод возвращает строку в формате: name1=value1&name2=value2
var qString = $("#myFormId .myFields").fieldSerialize();
Метод fieldValue – возвращает значения выбранных элементов в виде массива. С версии 0.91, метод всегда возвращает именно массив. Если нет корректных данных возвращается пустой массив, в противном случае массив содержит один или более элементов.
// получаем значения для полей с типом password
var value = $("#myFormId :password").fieldValue();
alert("Пароль: " + value[0]);
Метод resetForm – сбросит форму в начальное состояние через новый вызов элементов формы из объектной модели документа.
$("#myFormId").resetForm();
Метод clearForm – очищает элементы формы. Этот метод очистит все элементы ввода с типом text, password, textarea, очистит выбор в элементах select и снимет отметки с элементов radio и checkbox.
$("#myFormId").clearForm();
Метод clearFields – очищает элементы формы. Удобно применять когда требуется очистить только часть формы.
$("#myFormId .myFields").clearFields();
Согласен, согласен… Получилось очень много и довольно нудно. Поэтому вот Вам пример формы, попробуйте его, а при желании посмотрите исходные коды этого примера. Я старался все очень подробно комментировать.
Вы можете скачать исходный код примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.
Важно! Помните, что любая форма – потенциальная дыра в безопасности. Никогда не стоит полагаться на проверку данных на стороне клиента. Обязательно производите проверку данных на сервере!
Отзывов (84) на «jQuery Form – делаем ajax-форму»
Спасибо за статью. Вообще, ваш блог привлек мое внимание. Подписался. Продолжайте писать про jQuery, это очень полезно. Скоро собираюсь написать статью про jQuery.form. А точнее, просто перевести встроенную документацию на русский. Если сделаю это, то непременно сошлюсь на вас в виде «ссылок по теме».
Спасибо за добрые слова. Продолжать планирую, тем более, что тема поистине неисчерпаема…
Спасибо автору за проделанную работу, ранее использовал jQuery, но без AJAX, а благодаря ряду ваших статей последовательно, грамотно и доходчиво разъясняющих постепенно все становится на свои места (просто пока жутко все выглядело, море библиотек, а нормального материла с примерами маловато). Хотелось бы еще увидеть в вашем исполнении информацию по tables grids (Flexgrid, jqGrid, Ingrid – что-нибудь из этого). Я думаю такое заинтересуют многих.
Замечательный плагин, только с одним большим недостатком: если сервер вернул ошибку вы даже не узнаете о ней, кроме того, что не вызовется в «success»
Замечательный. А что до недостатка…. Выход всегда можно найти. Например предварительный запрос. Не самая лучшая идея конечно, но это первое, что в голову пришло. Если подумать, наверняка идеи могут быть и интересней. Это конечно, если внутрь не лезть.
Решил эту проблемку.
В jquery.forms.js надо добавить
options.complete = function(data, status){if (status != «success» && options.notsuccess) options.notsuccess(status);};
перед строкой
var files = $(‘input:file’, this).fieldValue();
Теперь в своем скрипте в опциях наряду с beforeSubmit и success можно добавить notsuccess, единственный параметр которого – это статус ошибки, точно не смотрел, но их там два как минимум:
«error» и «timeout»
Вот так примерно могут выглядеть опции с функциями:
var options = {
target: «#blabla»,
beforeSubmit: beforeAjax,
success: afterAjax,
notsuccess: errorAjax,
timeout: 3000
};
function errorAjax(statusText) {
alert(«error = «+statusText);
}
Спасибо, что дополнили и предложили решение. Надеюсь, что кому-то это поможет.
Спасибо! Полезный пост.
Привет с родственного блога
[...] Недавно столкнулся с проблемой отправки данных введенных в форму с помощью ajax (в этом мне помог jquery). Причем отправляться должны были данные с тех элементов формы, в которых была какая то информация. При большом количестве элементов в форме, проверять существует ли какое значение в этом элементе довольно таки глупо. Я решил обратиться к гуглу и вот на натолкнулся на такой пост. [...]
Хорошая статья но я может глупый такой что у меня не получается вообщем хотелось бы посмотреть полностью рабочый пример.
обясните почему у меня браузер после ответа сервера пытается сохранить скрипт ajaxtest.php хотя данные от него приходят
proba.html текст:
Имя:
Комментарий:
function aj(){
// готовим объект
var options = {
target: «#divToUpdate»,
url: «ajaxtest.php»,
success: function() {
}
};
// передаем опции в ajaxSubmit
$(«#myForm»).ajaxSubmit(options);
}
а вот сам скрипт ajaxtest.php:
<?php
header(‘Content-Type: text/javascript; charset=Windows-1251′);
if($_SERVER['HTTP_X_REQUESTED_WITH'] == ‘XMLHttpRequest’)
{
echo ‘во’;
echo «»;
print_r($_REQUEST);
echo «»;
} ?>
если можете вышлите на мыло ответ, в 1 посте не правильно указал мыло
почему у меня после отправки формы скрипту ajaxtest.php браузер предлагает сохранить скрипт ajaxtest.php? сам скрипт с таким содержанием:
<?php
header(‘Content-Type: text/javascript; charset=Windows-1251′);
if($_SERVER['HTTP_X_REQUESTED_WITH'] == ‘XMLHttpRequest’)
{
echo ‘во’;
echo «»;
print_r($_REQUEST);
echo «»;
}
?>
А что же Вы хотите получить, если передаете серверу заголовок с Content-Type в котором указываете text/javascript…
Непонятна логика Вашего эксперимента. Вы хотите интерпретировать ответ от сервера как script? Но тогда Вам надо посмотреть опцию dataType, но только это делается на стороне клиента, а никак не сервера…
P.S. Да, и добрый совет – старайтесь все-таки работать в utf-8 по возможности. Т.е. можно конечно и с windows-1251 поработать, но головная боль с кириллицей будет обеспечена…
спасибо, все сделал по вашему примеру
Осилил – спасибо.
Пока что еще не поставил себе – но стопудов посталю сегодня.
Ток подскажите как это все работает cp-1251?
Честно, намного проще utf-8 работать. В 1251 без головной боли не обойтись. Но если уж совсем без этого никак, то смотреть надо в сторону http://ru2.php.net/manual/ru/ref.mbstring.php
Немного не в тему, но все же.
Как убрать отправку формы по нажатию [Enter] если, фокус находится не на кнопке отправки?
return false; чтобы предупредить действия браузера по умолчанию.
function send_form()
{
// — Тут будет проверка формы
if ($(«#street_id»).val() == 0)
{
alert(«Введите адрес дома»);
$(«#street_id»).focus();
return false;
}
}
Алерт выводит, но форму все равно отправляет
Проверку привязывают к событию submit(). Это делается примерно так:
$(«form»).submit(function() {
if ($(«input:first»).val() == «correct») {
$(«span»).text(«Validated…»).show();
return true; // отправили форму
}
$(«span»).text(«Not valid!»).show().fadeOut(1000);
return false; // не отправили…
});
я не хотел цеплять скрипт формы jquery.form.js (для уменьшения)
просто интересно – если код такой – письмо приходит в кодировке 1251 если добавить ниже в этот код еще
type: «POST»,
тогда письмо приходит в utf-8 кодировке
почему ?
———————————————————
jQuery.ajax({
data: inputs.join(‘&’),
url: this.action,
timeout: 2000,
error: function() {
$(‘#message’).fadeOut(500,0.2, function() {
jQuery(this).css( ‘color’ , ‘red’ );
jQuery(this).html(‘Ошибка отправки!’);
} );
},
success: function(r) {
$(‘#content_text’).fadeTo(1000,0.2, function() {
jQuery(this).empty();
} );
$(‘#message’).html(‘Ваше сообщение успешно отправлено!’).fadeTo(2200,0.7).css( ‘color’ , ‘green’ );
}
}) ;
По умолчанию, для отправки данных серверу используется метод GET, если Вы определяете type: ‘POST’, то прямо указываете метод передачи данных.
Вообще библиотека jQuery «заточена» под utf-8 (и это правильно). Детально причины я конечно не объясню, но при использовании метода GET действительно можно нормально работать и с windows-1251, но при использовании метода POST – лучше использовать utf-8.
Если же такой возможности нет – проще предусмотреть перекодировку данных на стороне сервера.
Здравствуйте!
Спасибо за статью, узнал много нового. Но появился один вопрос… Можно ли таким способом отправить данные из <input type=»file»… ?
Извините. Разобрался! Все оказалось просто!
1)Цитата : проще предусмотреть перекодировку
имеется ввиду
$name=iconv(«UTF-8″, «windows-1251″,$name);
2) что дает
header(«Content-Type: text/html; charset=windows-1251″);
3) когда передпочтительнее использовать GET/POST а когда
JSON ?
спасибо
1. Я предпочитаю работать с мультибайтовыми строковыми функциями. Например так:
$name = mb_convert_encoding($name, «WINDOWS-1251″, «UTF-8″);
2. Немного странный вопрос… Это заголовок, который определяет тип и кодировку документа. В данном случае тип – text/html, а кодировка – windows-1251.
3. Этот вопрос тоже не совсем верно задан. GET/POST – это методы передачи данных, а JSON – это всего лишь формат представления данных, основанный на подмножестве синтаксиса JavaScript. Так что сами понимаете – ответить на такой вопрос вряд ли можно….
Почитайте статью Что такое JSON?
>Извините. Разобрался! Все оказалось просто!
Как разобрался? подскажи решение?
Привет, Groove
Вот мой файл html:
$(document).ready(function(){
$(«#element1″).load(«take.php»);
var options = {
target: «#element1″,
beforeSubmit: showRequest,
success: showResponse,
timeout: 3000
};
$(‘#upload’).submit(function() {
$(this).ajaxSubmit(options);
return false;
});
});
function showRequest(formData, jqForm, options) {
var queryString = $.param(formData);
return true;
}
function showResponse(responseText, statusText) {
$(MF.current).remove();
}
это форма для загрузки нескольких файлов на сервер одновременно с помощью плагина jquery.MultiFile.js. Надеюсь, что мой ответ помог тебе
Видать html в сообщения вставлять нельзя. Вот ссылка на файл slil.ru/26028206
а у меня ошибка:
Undefined index: HTTP_X_REQUESTED_WITH in form.php on line 3
яндекс с гуглем не помогли….
Конечно Undefined index… Если уж Вы обращаете внимание на это, то попробуйте сначала его define, а потом использовать.
А есть возможность сразу передавать записи, например, в текстовый файлик? или только другому скрипту сервера?
Плагин для jQuery, о котором тут рассказано, написан на JavaScript, как собственно и сама библиотека jQuery. Т.е. все это выполняется на стороне клиента. По простому говоря – в браузере. Так что Вы должны сначала четко уяснить, что данные передаются не другому скрипту сервера, а просто – серверному сценарию, написанному на каком-либо из языков программирования этих самых серверных сценариев. В данном случае в качестве такого языка используется PHP. А для передачи данных применяется технология Ajax.
Ваш вопрос просто не совсем корректен…
Из-за моего косноязычия мы друг друга не поняли=) Я в курсе что есть js, ответ на свой вопрос нашел в соседней статье про реализацию аякса посредством jQuery.
Благодарю за познавательный ресурс
Ну и отлично, что ответ найден!
Спосибо Gennady за ответ на вопрос №31 !
телепатия какой-то
)
Хотя как отправил вопрос, так сразу догадался и тут же исправил
У меня проблемы с атрибутом :
target
Дело в том , что моя форма проходит валидацию на стороне сервера, и если она не прошла , то сервер возвращает эту же форму с сообщениями об ошибках, на против не правильных полей. В поле target у меня стоит див, в котором находиться первая форма, т.е. первая форма заменяется формой с сообщениями об ошибках. Когда же я повторно нажимаю submit , то у меня происходит переход на страницу возвращаемую сервером, ajax вообще не отрбатывает. Как это исправить??
Чтобы это исправить, надо внимательно прочитать, что должно находиться в target.
target – идентифицирует тот элемент (или элементы) на странице, который должен быть обновлен при поступлении ответа от сервера. Значение может быть определено как объект или селектор jQuery или элемент DOM. Значение по умолчанию – null.
У меня в target указан div, разве это не элемент DOM?
Target , после присылки ответа обновляет форму правильно, но ajax повторно не срабатывает, т.е.
$(document).ready(function(){ …
уже не вызывается.
Да, конечно. Но Вы же сами написали выше, что в этом div’е у Вас изначально находится первая форма…
target – это куда вставляются сообщения об ошибках (например). Вот он и вставляет Вам ответ сервера в этот div. Только вместо формы… Вам же надо не вместо! Указывайте в target элемент (элементы), которые должны быть обновлены. Например отберите туда какие-то элементы формы. Например:
$(«#myForm em»);
т..е. надо указать конкретный целевой элемент и желательно привязанный к конкретному полю формы…
была идея так сделать, но тогда придётся серьёзно менять серверную часть…
У вас есть ещё одна статья с валидацией формы с помощью jQuery и там напротив каждого элемента ввода поле для вывода сообщения об ошибки … с сервера же приходит форма с этими сообщениями об ошибках, я не смогу их запихнуть в один конкретный элемент , они должны быть на против каждого элемента ввода.
Я подозреваю что можно где то в другом месте, а не в $(document).ready(function(){ …
вызывать ajaxSubmit , так что бы он и для новой формы отрабатывал.
Если Вы хотите использовать такие технологии как Ajax, то пожалуй без изменений в серверной части Вам все равно не обойтись. А ajaxSubmit можно вызывать везде, вернее всегда… Т.е. по любому событию, Вами же определенному.
Вы тут «Когда мы нажмем кнопку «Комментировать» значения полей name и comment будут переданы методом POST файлу form.php.» написали form.php вместо comment.php
Спасибо большое – исправил.
Скрипт не совсем из этого материала, но тоже очень интересен. Работает на ура в опере и FF, но в IE не происходит ни какой реакции. Насколько хватило моих средств отладки, IE не может выполнить function(response). Может я и ошибаюсь, может кто то подсказать как отладить ошибку и где искать решение.
var $ = jQuery.noConflict();
$(document).ready(function() {
//$(‘#chkname’).hide();
$(‘#send’).click(function(){
$(‘#chkname’).show();
$.post(‘/opn/bin/ajax/ckmail/chekmailadress.php’, {
spinput: $(‘#spinput’).val()
}, function(response){
$(‘#chkname’).fadeOut();
setTimeout(«finishAjax_username(‘chkname’,'»+escape(response)+»‘)», 400);
});
return false;
});
});
function finishAjax_username(id, response){
$(‘#chkname’).show();
$(‘#’+id).html(unescape(response));
$(‘#’+id).fadeIn();
}
test
в php файле
HTTP_X_REQUESTED_WITH – пустое значение.
скрипт вызываю через $.ajax().
не подскажете в чем проблема?
Глобальная переменная $_SERVER['HTTP_X_REQUESTED_WITH'] имеет значение XMLHttpRequest, если этот объект был создан, т.е. ajax-запрос был отправлен. Если в ней ничего нет – соответственно и ajax-запрос не был отправлен. Ищите проблему на стороне клиента, проверяйте как и куда отправляете запрос.
разобрался.. дело в том, что изначально я просто проверял, есть ли такая переменная:
echo $_SERVER[’HTTP_X_REQUESTED_WITH’];
и ехо всегда пустое. поэтому и решил, что переменная не создаётся.
а вот лказалось, что условие
if($_SERVER[’HTTP_X_REQUESTED_WITH’] == ‘XMLHttpRequest’)
в этот же момент работает прекрасно..
вот такой вот нюанс.
но всё равно большое спасибо за помощь. у вас много полезного материала.
День добрый!
Полезные статьи всегда нахожу на вашем блоге, спасибо огромное.
У меня вопрос, когда я посылаю вот так:
$(‘#formUpload’).submit(function() {
$.post(
‘uploadAjax.php’,
{
param: «test»
},
onAjaxCompleate
);
return false;
});
У меня имеется заголовок:
$_SERVER['HTTP_X_REQUESTED_WITH']
Но когда я посылаю данные так:
var options = {
target: «#output»,
success: resize,
timeout: 3000
};
$(‘#formUpload’).submit(function() {
$(this).ajaxSubmit(options);
return false;
});
Заголовок не проставляется. Скорее всего проблема в jquery.form.js как я понимаю? не могли бы подсказать почему такое может быть и как возможно поправить?
Знаете, детально не разбирался, но у меня тоже самое. Видимо из-за самого плагина.
у меня всё отлично работает только кирилица не передаётся.
Я всё сохранил в utf -8 в хтасесе написал что utf
в мете тоже
только вот пост передаёт закарючки всё равно.
подскажите в чём может быть проблема и как это решается.
Попробуй переслать данные просто из формы(html) на другую страницу(html) какие данные придут? если все нормально, то проблема в php. У меня один раз была похожая проблема потому как PHP был установлен как cgi модуль(или как то так) и в cgi-bin лежал .htaccess в котором было прописано своя кодировка по умолчанию, поменял там на utf-8 и все заколосилось.
А ты можешь выложить свой файл jquery.form.js? и какую версию jquery используешь?
я нашол ошибку
всё работало нормально просто phpmyadmin отображал коряво кодировку, а при выдёргивании из базы всё работает отлично
Почему то происходит отправка данных формы сразу двойная, но иногда – нормально один раз. Debugger тоже это показывает. Причем после этой ошибки ответ уже не приходит, хотя php-скрипты выполняются. В чем может быть причина?
Zamir, я не телепат, это точно… «Отрубайте» лишнее, тестируйте по шагам – значит где-то есть что-то, что заставляет форму отправиться дважды…
jquery.tabs.js
jquery.form.js
Суть проблемы, с помощью вкладок организовано 3 вкладки с разными формами.
Вопрос, на 1 вкладке, jquery.form работает, отправляет данные без перезагрузки, на второй и следующих даже этаже форма не отправляется, а браузер переходит на скрипт php.
Как решить проблему?
Столкнулся примерно с такой же проблемой. В ИЕ правда так и не работает. Я в парамтре success указываю функцию допустим complite и потом в ней вешаю обработчики на формы которые приходят AJAX’ом.
function resize() {
$(‘#form2′).submit(function() {
$(this).ajaxSubmit(options);
return false;
});
$(‘#form3′).submit(function() {
$(this).ajaxSubmit(options);
return false;
});
}
Не понял, при чем тут моя проблема и функция, которая будет исполняться при получении успешного ответа от сервера?
У меня то 3 вкладки, пользователь будет изменять одну из них и сохранять, а не каждую из трех обязательно…
*** пользователь будет заполнять одну из них:)
Сделал Ajax-форму с валидацией как описывалось в ваших статьях. Теперь мне необходимо реализовать показ локализованного gif-рисунка загрузки после нажатия кнопки отправки данных до получения ответа с сервера. Насколько я понял, это указывается в функции showRequest(). Объясните пожалуйста подробнее как это сделать?
Zamir, да.
$(«<img src=’image.gif’ />»).appendTo(«#output»);
все замечательно что никак не пойму .. куда вставлять $(«#myForm»).resetForm(); чтобы он работал.. буду очень благодарен вашей подсказке.
использовал ваш пример с валидацией
ICQ: 13006582 если не сложно
Никуда не надо вставлять. Если в форме есть элемент input с типом reset (кнопка Reset), то он сработает и так.
мне нужно чтобы $(”#myForm”).resetForm(); сработал в случае удачной отправки данных в форму.пхп, а не ручной ресет
В объекте options, в опции success.
var options = {
target: «#output»,
timeout: 3000 // тайм-аут
};
как-то вот сюда?
Да, в опции success можно указать функцию, которая будет вызвана в случае успешного выполнения ajax-запроса.
Привет, а как быть, если на странице больше одной формы и надо обработать нужную с помощью ajaxSubmit, причем ID формы формируется динамически и заранее оно не известно.
Пробовал в кнопек по онклику передавать ид формы – не работает. Ответа пока не нашел. Кто знает дайте наводку.
Классная штука.
Перешел на Jquery с JsHTTPRequest, где была встроенная отправка форм.
С этим расширением отлично работает, но нужно с бэкэндом заморачиваться в любом случае..
Недавно познакомился с jQuery, большое спасибо Вам за статьи.
Хочу создать динамическую форму, не понятно в какую сторону копать, может подскажете?
Идея такая, есть список – при выборе элемента создается еще один список и тд. дальше надо подумать еще, скорее всего с БД надо работать.
По сути нужно отловить выбор элемента в списке без использования кнопки «submit» и отправить значение, а уже после выбора всех необходимых елементов отправлять запрос.
Стандартно эта задача решается примерно так:
на основании выбора в первом элементе select отправляется ajax-запрос к серверу, в ответе которого передается нужный список, которым и заполняется второй select и т.д. В общем кнопка «submit» может и вообще не понадобится, если на основании выбора из многих select’ов Вы просто выводите какую-то информацию.
подскажите пожалуйста, как вместо alert получить и вставить в DOM ответ самого php-скрипта?
Если для выполнения запроса использовать $.ajax(option), то делают это обычно, указывая в опции success функцию-обработчик. Ну, например:
$.ajax({
timeout: 3000,
type: «POST»,
url: «example.php»,
data: «p=1″,
success: function(answer) {
$(«#result»).html(answer);
}
});
т.е. в примере мы вставляем ответ сервера как HTML-код, в элемент с идентификатором #result.
Тут вариантов много – в зависимости от того, что именно представляет собой ответ сервера…
Вам стоит прочитать jQuery и Ajax: запросы и jQuery и Ajax: события.
подскажите, что лучше использовать эту библиотеку с данным плагином или же JsHttpRequest. Что по вашему будет лучше? мне также нужно чтобы была возможность загрузки как одного изображения так и не ограниченное кол-во и совместно с разными полями типа инпут,селект и т.п. Справится ли с этой задачей jQuery Form ?
Спасибо за статью. А как можно добавить в форму, где работает валидия возможность отрывания pop-up окна, если форма заполнена успешна ?
во всех примерах показываются просто переход на страницу, указанный в
Спасибо за статью!!
Очень помогла разобраться в ajax
У меня только вопрос похожий как у Максима.
Можно с примером по поводу нескольких форм с разными ID ? ID заранее известные.
Спасибо
Можно рассматривать ajaxSubmit(options) как обычный метод, который применяется к набору элементов jQuery. Т.е. Ваш вопрос больше про селекторы в jQuery – если Вам надо выбрать несколько ID, можно записать так:
$("#myForm1, #myForm2").ajaxSubmit(options);или, если все формы имеют например класс myForms, то:
$(".myForms").ajaxSubmit(options);Спасибо за совет!
Подскажи пож. а как можно определить с какой формы поступил запрос на обработчик форм (если он один). Хотя это я примерно представляю как. А вот как обработчику передавая ответ success указать какой именно єлемент должен быть обновлен ? Если они указаны вот так #area_form,#city_form
Заранее благодарен!
Либо все-таки идти простейшим путем – т.е. для каждой формы делать:
$("#myForm1").ajaxSubmit(options1); $("#myForm2").ajaxSubmit(options2);либо непростым, но верным путем – в success определять функцию, которая будет производить «разбор» ответа от сервера, с целью определить, что именно надо обновить.
Спасибо снова.. Не буду тебя закидывать вопросами, просто подскажи где можно почитать об этих функциях..
И еще раз огромное спасибо!!
Если по самому плагину – оригинальная документация http://malsup.com/jquery/form/, если речь о селекторах jQuery, то оригинальная документация http://docs.jquery.com/Selectors, на русском – можно искать соответствующие статьи через карту сайта.
Хорошая статья. Только плохо что со сменой библиотеки иногда удаляются или меняются названия функций.
fieldSerialize() например уже нету. Осталось только serialize() Я конечно понимаю что это одно и тоже, но мне кажется что нужно поддерживать старые функции…. А то в проекте править много придеться если что….
Отлично!
Извините, комментирование этой статьи завершено. Обсуждение статьи можно продолжить на форуме jQuery.