отправьте форму через Ajax с помощью prototype и обновите результат div

Мне интересно, как я могу отправить форму через Ajax (используя prototype framework) и отобразить ответ сервера в div "result". Html выглядит так:

<form id="myForm" action="/getResults">
    [...]
    <input type="submit" value="submit" />
</form>
<div id="result"></div>

Я попытался прикрепить функцию javascript (которая использует Ajax.Updater) в "onsubmit" (на форме) и "onclick" (на входе), но форма по-прежнему "не Ajax", отправленная после завершения функции (поэтому вся страница заменяется результатами).

4 ответов


Проверьте страницы прототипа API на Form.Request и Event работа.

в принципе, если у вас есть это:

<form id='myForm'>
.... fields ....
<input type='submit' value='Go'>
</form>
<div id='result'></div>

ваш js будет, более или менее:

Event.observe('myForm', 'submit', function(event) {
    $('myForm').request({
        onFailure: function() { .... },
        onSuccess: function(t) {
            $('result').update(t.responseText);
        }
    });
    Event.stop(event); // stop the form from submitting
});

сначала вам нужно сериализовать форму, затем вызвать Ajax Updater, используя параметры POST и передайте ему данные сериализованной формы. Затем результат появится в элементе, который вы разделили.


вам нужно вернуть значение false из функции ajax, которая блокирует стандартную форму отправки.

<form id="myForm" onsubmit="return myfunc()" action="/getResults">


function myfunc(){
   ... do prototype ajax stuff...
  return false;

}

использование onsubmit в форме также захватывает пользователей, которые отправляют с ключом enter.


вам нужно остановить действие по умолчанию onsubmit событие.

например:

function submit_handler(e){
    Event.stop(e)
}

подробнее о остановка поведения события по умолчанию в Prototype "