как привязать в форме регистрации ajax и redbeen?
Как заставить мою форму регистрации работать через ajax? Она не отправляется на сервер. Без ajax всё работает.
// js/reg.js и здесь явно что-то не так
$(document).ready(function () {
$('#form1').submit(function (e) {
e.preventDefault();
var formNm = $(this);
$.ajax({
type: 'POST',
url: 'php/signup.php', // Обработчик формы отправки
data: formNm.serializeArray(),
success: function (data) { //в случае успеха выводим результаты в div "results"
// Вывод текста результата отправки в текущей форме
$(formNm).html(data);
// Перезагрузка формы через 3 секунды
setTimeout(function() { $("#form1").load("http://ra1s/reg.html #imputs-reg") }, 200);
}
});
return false;
});
});
<?php
include 'php/signUp.php';
?>
<form method="POST" class="form" id="form1">
<div id="imputs-reg">
<h2 class="form__title">Зарегистрироваться</h2>
<input type="text" placeholder="User" class="input" name="login" value="<?php echo @$data['login']; ?>"><br/>
<input type="email" placeholder="Email" class="input" name="email" value="<?php echo @$data['email']; ?>"><br/>
<input type="password" placeholder="Password" class="input" name="password" value="<?php echo @$data['password']; ?>"><br/>
<input type="password" placeholder="Password" class="input" name="password_2" value="<?php echo @$data['password_2']; ?>"><br/>
<strong><?php captcha_show(); ?></strong>
<input type="text" name="captcha" ><br/>
<button class="btn-reg" type="submit" name="do_signup">Зарегистрироваться</button>
</div>
</form>
// signup.php
<?php
require 'db.php';
$data = $_POST;
function captcha_show(){
$questions = array(
1 => 'Столица России',
2 => 'Столица США',
3 => '2 + 3',
4 => '15 + 14',
5 => '45 - 10',
6 => '33 - 3'
);
$num = mt_rand( 1, count($questions) );
$_SESSION['captcha'] = $num;
echo $questions[$num];
}
//если кликнули на button
if ( isset($data['do_signup']) )
{
// проверка формы на пустоту полей
$errors = array();
if ( trim($data['login']) == '' )
{
$errors[] = 'Введите логин';
}
if ( trim($data['email']) == '' )
{
$errors[] = 'Введите Email';
}
if ( $data['password'] == '' )
{
$errors[] = 'Введите пароль';
}
if ( $data['password_2'] != $data['password'] )
{
$errors[] = 'Повторный пароль введен не верно!';
}
//проверка на существование одинакового логина
if ( R::count('users', "login = ?", array($data['login'])) > 0)
{
$errors[] = 'Пользователь с таким логином уже существует!';
}
//проверка на существование одинакового email
if ( R::count('users', "email = ?", array($data['email'])) > 0)
{
$errors[] = 'Пользователь с таким Email уже существует!';
}
//проверка капчи
$answers = array(
1 => 'москва',
2 => 'вашингтон',
3 => '5',
4 => '29',
5 => '35',
6 => '30'
);
if ( $_SESSION['captcha'] != array_search( mb_strtolower($_POST['captcha']), $answers ) )
{
$errors[] = 'Ответ на вопрос указан не верно!';
}
if ( empty($errors) )
{
//ошибок нет, теперь регистрируем
$user = R::dispense('users');
$user->login = $data['login'];
$user->email = $data['email'];
$user->password = password_hash($data['password'], PASSWORD_DEFAULT); //пароль нельзя хранить в открытом виде, мы его шифруем при помощи функции password_hash для php > 5.6
R::store($user);
echo '<div style="color:dreen;">Вы успешно зарегистрированы!</div><hr>';
}else
{
echo '<div id="errors" style="color:red;">' .array_shift($errors). '</div><hr>';
}
}
?>
// db.php
<?php
require 'libs/rb.php';
R::setup( 'mysql:host=127.0.0.1;dbname=ra1s','root', '' );
if ( !R::testconnection() )
{
exit ('Нет соединения с базой данных');
}
session_start();
Ответы (2 шт):
Автор решения: Andrey Rais
→ Ссылка
удалось сделать рабочий вариант, но мне очень не нравится. Так как всё-равно идет перезагрузка страницы, а не формы
$(document).ready(function () {
$('form[data-action]').submit(function(e) {
e.preventDefault();
var formNm = $(this);
$.ajax({
url: this.getAttribute('data-action'), //полученный url из атрибута data-action
type: 'post',
dataType: 'html',
data: new FormData($(this)),
contentType: false,
processData: false,
success: function(data) { //в случае успеха выводим результаты в div "results"
// Вывод текста результата отправки в текущей форме
$(formNm).html(data);
// Перезагрузка формы через 3 секунды
setTimeout(function() { $("#form1").load("http://ra1s/reg.html #imputs-reg") }, 200);
}
});
return false;
});