AJAX

B
На сайте с 14.03.2013
Offline
5
799

Здравствуйте! Есть форма отправки сообщений. Нужно чтобы данные уходили аяксом.


<h2>Отправить заявку</h2>
<form action="/send-form/send_form.php" method="post" id="cont_form">
<div class="field">
<div class="field_text">Имя:</div>
<div class="input"><input type="text" name="name" /></div>
</div>
<div class="clear"></div>
<div class="field">
<div class="field_text">Контактный E-mail:</div>
<div class="input"><input type="text" name="email" /></div>
</div>
<div class="clear"></div>
<div class="field">
<div class="field_text">Контактный телефон:</div>
<div class="input"><input type="text" name="phone" /></div>
</div>
<div class="clear"></div>
<div class="field">
<div class="field_text">Текст заявки:</div>
<div class="input"><textarea name="message" rows="10" cols="40"></textarea></div>
</div>
<div class="clear"></div>
<div class="field">
<div class="field_text">Сколько будет 5+5:</div>
<div class="input"><input type="text" name="number" /></div>
</div>
<div class="clear"></div>
<button type="submit" id="sub" class="submit">Отправить</button>
</form>

<script type="text/javascript">
$("#sub").click(function(){

$.ajax({
url: "/send-form/send_form.php",
type: "post",
cache: false,
dataType: "html",
success: function(){
alert("Данные отправлены");
}
});
});
</script>

Однако это не работает. Подскажите пожалуйста, что не так?

R
На сайте с 18.12.2009
Offline
92
#1

Так Вы ничего не отправляете! data где?


<script type="text/javascript">
$("#sub").on("click", function(){

$.ajax({
url: "/send-form/send_form.php",
type: "post",
cache: false,
dataType: "html",
data: $("form").serialize(),
success: function(){
alert("Данные отправлены");
}
});
});
</script>
B
На сайте с 14.03.2013
Offline
5
#2

Допустим я сделаю так:


<div id="contact-container">
<form action="send_form.php" method="post">
<p>Ваше имя: <input id="name" type="text" name="name" /></p>
<p>Ваш email: <input id="email" type="text" name="email" /></p>
<p>Сообщение:</p> <textarea id="msg" rows="7" cols="40" name="msg"></textarea>
<p><button id="btnSubmit" type="submit">Отправить</button></p>
<div id="message"></div>
</form>
</div>
<script type="text/javascript">
$("#btnSubmit").click(function(){
var data = $('#contact-container form').serialize();
alert(data);
$.ajax({
url: "send_form.php",
data: $('#contact-container form').serialize(),
type: "post",
cache: false,
dataType: "text",
success: function(text){
$("#message").html("Данные добавлены!");
}
});
});
</script>

Все равно не работает!

R
На сайте с 18.12.2009
Offline
92
#3

А что происходит то? Что значит не работает?

Я бы для button указал type, как "button", так как Вы нигде не указываете return false, после нажатия.

Далее, правильнее в Вашем случае будет, все таки, data: data, если уж присвоили переменной значение. Но это не влияет на ошибку.

И последнее - хрен его знает, правильно у Вас указан файл .php, и что внутри файла.

B
На сайте с 14.03.2013
Offline
5
#4

Внутри файла php происходит прием данных из формы, обработка и INSERT INTO в базу данных. Здесь все работает без проблем.

send_form.php


<?php
/*Важные параметры мы заносим в константы*/
define("DB_HOST", "localhost");
define("DB_LOGIN", "root");
define("DB_PASSWORD", "password");
define("DB_NAME", "gbook");
/*Соединяемся с сервером базы данных*/
mysql_connect(DB_HOST, DB_LOGIN, DB_PASSWORD) or die("Ошибка подключения к базе данных!");
/*Выбираем базу данных*/
mysql_select_db(DB_NAME) or die(mysql_error());

/*Функция фильтрации данных*/
function clearData($data, $type="s"){
switch($type){
case "s": $data = trim(strip_tags($data)); break;
case "i": $data = abs((int)$data); break;
}
return $data;
}
/*Если данные пришли, принимаем их и фильтруем*/
if(!empty($_POST['name']) and !empty($_POST['email']) and !empty($_POST['msg'])){
$name = clearData($_POST['name']);
$email = clearData($_POST['email']);
$message = clearData($_POST['msg']);
/*Формируем SQL-запрос на добавление данных*/
$sql = "INSERT INTO msgs(
name,
email,
msg)
VALUES(
'$name',
'$email',
'$message')";
/*Посылаем запрос в базу данных*/
mysql_query($sql) or die(mysql_error());
sleep(3);
/*Делаем редирект во избежании нажатия F5 и повторного отправления данных*/
header("Location: gbook.php");

}
else{
header("Location: gbook.php");
}
?>

А вот при нажатии кнопки отправить, просто происходит отправка данных в базу и никакого аякса нет. Страница перезагружается и возвращается обратно посредством header("Location: gbook.php").

Скрипт аякса выглядит так:


<script type="text/javascript">
$("#btnSubmit").click(function(){
$.ajax({
url: "send_form.php",
data: $('#contact-container form').serialize(),
type: "post",
cache: false,
dataType: "html",
success: function(){
$("#message").html("Данные добавлены!");
}
});
});
</script>

Но он не работает(

R
На сайте с 18.12.2009
Offline
92
#5
rerighter:
Я бы для button указал type, как "button", так как Вы нигде не указываете return false, после нажатия.


<script type="text/javascript">
$("#btnSubmit").on("click", function() {
$.ajax({
url: "/send-form/send_form.php",
type: "post",
cache: false,
dataType: "html",
success: function() {
alert("Данные отправлены");
}
});
return false;
});
</script>
DiAksID
На сайте с 02.08.2008
Offline
236
#6

надо снять с кнопки и/или формы стандартную html функцию отправки данных.

- либо сделайте кнопку не type="submit" а type="button"

- либо функцию вешайте не на кнопку а на событие onsubmit формы (функция должна вернуть false)

- либо переопределите submit формы на эту функцию (в функции надо остановить выполнение стандартного запроса)

это необходимое условие, остальное зависит от самого ajax-запроса

show must go on !!!...
B
На сайте с 14.03.2013
Offline
5
#7

СПАСИБО ОГРОМНОЕ!!!!!!!!!!!!!!!!!!!! ВСЕ РАБОТАЕТ)

doctorpc
На сайте с 12.07.2009
Offline
112
#8

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий