|
Нужна помощь с отправкой формы
Подскажите как отправить форму 'post' из подгружаемого контента.
Подгрузку делаю так [spoiler]
$('#content').on('click','.mod2',function(){
var url = $(this).attr('href');
$.ajax({
type: 'GET',
url: '?ajax=' + url,
success: function(data){
$('#content').html(data);
}
});
if(url != window.location){
window.history.pushState(null, null, url);
}
return false;
});
Отправить пытаюсь так
$('#content').on('click','#post1',function(){
var url = $(this).attr('href');
var aform = $('#postform').serialize();
$.ajax({
type: 'POST',
url: '?ajax=' + url,
dataType: "html",
data: aform,
success: function(data){
$('#content').html(data);
},
error: function(xhr, str){
alert('Возникла ошибка: ' + xhr.responseCode);
}
});
return false;
});
В подгружаемом контенте форма регистрации
<table border="2" width="100%" align="center">
<form id="postform" method="post">
<tr>
<td width="10%"><div><b>ЛОГИН</b></div></td><td width="30%" align="center">
<input type="text" name="us-login" id="creLogin" value=""></td>
<td width="10%">ОБЯЗАТЕЛЬНО</br>Заполнять</td>
<td>Выбранный Вами ЛОГИН может состоять из букв латинского алфавита или
кириллицы различного регистра, цифр и знака минус (-), и должно быть длиной от 5
до 15 символов. Пример: (<em>Андрей Айдар</em>).
</td></tr><tr></tr>
<tr>
<td width="10%"><div><b>ПОЛНОЕ ИМЯ</b></div></td><td width="30%" align="center">
<input type="text" name="us-name" value=""></td><td width="10%"></td><td>
Здесь вы можете указать свое полное Ф.И.О (Фамилия, Имя, Отчество).
Указанное Вами Имя может состоять из букв латинского алфавита или кириллицы различного регистра,
и должно быть длиной не более 100 символов.
Пример: (<em>Иванов Иван Иванович</em>)
</td></tr><tr></tr>
<tr>
<td width="10%"><div><b>ВАШ E-mail</b></div></td><td width="30%" align="center">
<input type="email" name="us-email" id="creMail" value=""></td>
<td width="10%">ОБЯЗАТЕЛЬНО</br>Заполнять</td>
<td>На этот почтовый адрес будет выслан пароль, если Вы его забудете.
Рекомендую заполнить это поле действительным адресом электронной почты.
На сайте проходит активация аккаунта через e-mail.
</td></tr><tr></tr>
<td width="10%"><div><b>ПАРОЛЬ</b></div></td><td width="30%" align="center">
<input type="password" name="us-pass" id="crePass" value=""></td>
<td width="10%" rowspan="3">ОБЯЗАТЕЛЬНО</br>Заполнять</td>
<td rowspan="3">Пароль может состоять из букв латинского алфавита или кириллицы различного регистра,
цифр и любых специальных символов (<span>~</span>, <span>!</span>, <span>@</span>, <span>#</span>, <span>$</span>,
<span>%</span>, <span>^</span>, <span>&</span>, <span>*</span>, <span>-</span>, <span>+</span>, <span>=</span> и др.),
и должен быть длиной от 6 до 15 символов.
</td></tr><tr></tr>
<td width="10%"><div><b>ПОВТОР ПАРОЛЯ</b></div></td><td width="30%" align="center">
<input type="password" name="us-pass2" id="crePass2" value=""></td>
</tr><tr></tr>
<td width="10%"><div><b>ДАТА РОЖДЕНИЯ</b></div></td><td width="30%" align="center">
<input type="text" name="us-rod-date" value=""></td><td width="10%"></td><td>
Здесь вы можете указать доту своего рождения.
Дата может состоять только из цифр и точек !
Пример: (<em>29.05.1980</em>)
</td></tr><tr></tr>
<tr>
<td><div><input id="post1" type="submit" value="СОЗДАТЬ"></div></td>
</tr>
</form></table>
Прием просто так
if($_POST['ajax'] or $_POST['login'] or $_POST['us-login']){
echo 'USER CREATE';
exit();
}
[/spoiler]Но пост не приходит.В чем может быть моя ошибка? |
$('#content').on('submit','#postform',function()
//или тут установить обработчик
success: function(data){
$('#content').html(data)
.find('#postform')
.submit(function() {
//отправка формы
});
}
Ну и прием "просто так", это только для теста годится, но никак не для регистрации. |
Оно и есть для теста...
А ваш код попробую и отпишусь.. |
Цитата:
|
Чето не догоняю...
Прошу помощи... Что и куда всатить? |
1 способ - это не вставить, а заменить
$('#content').on('click','#post1',function() на $('#content').on('submit','#postform',function() то есть в итоге должно быть:
$(function() { //код должен быть помещен в эту секцию - это исполнение после загрузки страницы
$('#content').on('submit','#postform',function(){
//var url = $(this).attr('href'); - это вообще выбросить, ибо описан щелчок по кнопке у которой нет свойства href
//var aform = $('#postform').serialize(); - тоже выбросить, промежуточные перменные в данном случае совсем не нужны
$.ajax({
type: 'POST',
url: this.action, //'?ajax=' + url, - а вот здесь, если используется url как переменная, то это может быть свойства action формы
dataType: "html", //тип html не лучший тип ответа сервера, так как могут быть ошибки, лучше JSON
data: $(this).serialize(),
success: function(data){
//ответ сервера о результате принятых данных
},
error: function(xhr, str){
alert('Возникла ошибка: ' + xhr.responseCode);
}
});
return false;
});
});
2 способ - это сразу при загрузке установить обработчик форме, которая загружается динамически в '#content'. Используйте первый, если не догоняете. ) |
Цитата:
Даже незнаю что делать... |
Ну значит в чем-то допускаете ошибку.
1) Судя по коду, ближайший родитель формы '#content' на странице присутствует. 2) Метод POST позволяет предавать и GET параметры, правда в вашем случае, что при запросе формы, что при ее отправке указывается один и тот же url - ?ajax=' + url, который во втором случае ошибочен, поэтому он из кода удален. 3) Если надо передавать в метод ajax url php-скрипта принимающего форму, то этот url должен быть прописан в атрибуте action формы. То есть: <form id="postform" action="url обработчика формы"> method="post" - это указывать в форме нет необходимости, если только не получать в отправке и метод передачи, и планируется отправка и обычным способом при отключенном JS, но в последнем случае и РНР-сценарий должен такой случай обрабатывать. Иначе url можно и в методе прописать. А у вас добавлен action="url обработчика формы"? Он ведь здесь получается - url: this.action |
Цитата:
Но все равно не приходит пост.. Что странно если страницу просто перегрузить и отправить то пост приходит а если сменилось несколько страниц перед этой то при нажатии вообще ничего непроисходит.. У меня если приходит не из аякса все и страница и контент записывается в одну переменную а потом выводится через ехо.. Если через ява то меняется только контент... Отсюда вывод..Он не считывает инфу из формы вновь подгруженного контента.. Как быть? |
Ну не знаю почему при смене нескольких... Есть ошибки значит, на клиенте, как то не присутствует объект родитель, то есть он возможно тоже добавляется динамически (по коду этого не скажешь), что-то еще...
Получение и отправку формы можно было бы и в одном месте прописать:
$('#content').on('click','.mod2',function(){
var url = $(this).attr('href');
$.ajax({
type: 'GET',
url: '?ajax=' + url,
success: function(data){
$('#content').html(data)
.find('form')
.submit(function() {
$.ajax({
type: 'POST',
url: this.action,
dataType: "html",
data: $(this).serialize(),
success: function(data){
//ответ сервера о результате принятых данных
},
error: function(xhr, str){
alert('Возникла ошибка: ' + xhr.responseCode);
}
});
return false;
})
}
});
if(url != window.location){
window.history.pushState(null, null, url); //с какой целью не понятно
}
return false;
});
Что еще у вас не так, сказать трудно, не представляя всего. |
| Часовой пояс GMT +3, время: 06:52. |
|