Не получаю ответ AJAX

12
vlad00777
На сайте с 24.12.2009
Offline
119
1360

Доброй ночи форумчане!

Начинаю изучать AJAX, по мере надобности, посему возникают ситуации в которых мне нужна помощь, вот у вас ее и прошу.

Не получаю ответ при отправке ajax запроса, смотрел через фаербаг.

Вот скрипт отправки:


$(document).ready(function(){
$("#subb").click(otp);

function otp() {
var post2 = $('input[type="radio"]:checked').val();
var pos = {poll : post2}
$.ajax({
url: '/opros.php',
type: "POST",
dataType: "json",
data: pos,
success: function(data){
$("#polls-3-ans").html(data);
}
});
}

});

Форма такая:


<form class="comm" action="/opros.php" method="post">
<input type="radio" id="poll-answer-1" name="poll" value="1"> <label for="poll-answer-1">Ні</label>
<input type="radio" id="poll-answer-2" name="poll" value="2"> <label for="poll-answer-2">Так</label>
<input type="submit" name="vote" class="buttons" id="subb" value=" Відповісти ">
</div>
</form>

Php код:


if (isset($_POST['poll'])) {
$answer = $_POST['poll'];
}

if (isset($answer) and $answer == 1) {
$arr = "Дякуємо Вам за відповідь!";
echo json_encode($arr);
}

if (isset($answer) and $answer == 2) {
$arr = '
<form class="comm" action="/opros.php" method="post">
<input type="radio" id="poll-answer-3" name="poll" value="3"> <label for="poll-answer-3">Ні</label>
<input type="radio" id="poll-answer-4" name="poll" value="4"> <label for="poll-answer-4">Так</label><input type="submit" name="vote" class="buttons" id="subb" value=" Відповісти ">
</form>
';
echo json_encode($arr);
}

if (isset($answer) and $answer == 3) {
$arr = '
<form class="comm" action="/opros.php" method="post">
<textarea name="comment"></textarea></li>
<input type="submit" name="vote" class="buttons" id="subb" value=" Відповісти ">
</form>
';
echo json_encode($arr);
}

if (isset($answer) and $answer == 4) {
$arr = "Дякуємо Вам за відповідь!";
echo json_encode($arr);
}

if (isset($_POST['comment'])) {
$to = 'почта';
$subject = 'Тема';

mail($to, $subject, $comment);
$arr = "Дякуємо за Ваш відгук!";
echo json_encode($arr);
}

Не могу никак понять, уже пол дня сижу не работает ajax и все. Работает как обычный php перекидывает на страницу с ответом json.

Если запускаю функцию не по кнопке, а сразу, тогда все окей аякс срабатывает и получает ответ и выводит куда нужно.

Помогите найти ошибку, т.к уже и пробовал через Jquery form plugin результат тот же.

Верстка. Качественно! Адаптивная, резиновая, с параллаксом и прочими плюшками. В ЛС.
Mik Foxi
На сайте с 02.03.2011
Offline
1191
#1

Ну так и будет перекидывать, чтоб не перекидывало, нужно делать както так:

<form action="" method="post">
Имя: <input name="name" type="text" maxlength="128">
<input name="submit" type="submit" value="Отправить" onClick="saveform (this.form);return false;">
</form>
<div id="enter_name"></div>


<script type="text/javascript">
function saveform (data)
{
var name = data.name.value;

$.post('save.php',{name:name},function(data){
$('#enter_name').html(data);
},'json');
}
</script>
<script src="http://code.jquery.com/jquery.js"></script>

тогда будет без перезагрузки выводиться ответ на той же странице

Антибот, антиспам, веб фаервол, защита от накрутки поведенческих: https://antibot.cloud/ (Зеркало: https://антибот.рф/ ) Форум на замену серчу: https://foxi.biz/
дани мапов
На сайте с 06.09.2012
Offline
204
#2

В конце функции otp надо вставить

return false;
Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
vlad00777
На сайте с 24.12.2009
Offline
119
#3
дани мапов:
В конце функции otp надо вставить
return false;

Спасибо помогло!

Но только до следующего появления формы т.е 1 итерация проходит и все, дальше так же перекидывает. Создавал отдельную функцию, разные айди назначал, прописывал ретурн, но...

В фаербаге На отправку вообще ничего не идет, никакого запроса.

IL
На сайте с 20.04.2007
Offline
435
#4
vlad00777:
Но только до следующего появления формы

on используйте.

$("#subb").on("click",otp);
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
vlad00777
На сайте с 24.12.2009
Offline
119
#5

Все-равно не работает :(

Форма следующая появляется, нажимаю сабмит и перебрасывает на результат в пхп скрипте. return false стояит. Пробовал уже и разные функции и передавать через json только числа, а потом работать и вставлять форму через javascript, результат то же. Если приписываю к сабмиту onClick="return false;" то не перекидывает и на отправку не идет POST, судя по фаербагу. Готов немного заплатить если расскажите в чем была проблема...

IL
На сайте с 20.04.2007
Offline
435
#6

Вообще, для форм предпочитаю onsubmit использовать.

Ещё можно delegate посмотреть http://api.jquery.com/delegate/

или on ему соответствующий использовать.

Оптимизайка
На сайте с 11.03.2012
Offline
396
#7

вместо

$("#subb").click(otp);

попробуйте

$("#subb").live("click", otp);

если не получится светите URL где можно вживую проверить

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
IL
На сайте с 20.04.2007
Offline
435
#8
Оптимизайка:
$("#subb").live("click", otp);

live уже с 1.7 deprecated

А в 1.9 может и не сработать.. т.к. removed

дани мапов
На сайте с 06.09.2012
Offline
204
#9

Вообще странно, у меня мой вариант работает и при многократном нажатии. А почему ответ в json формате? Уберите в функции otp эту строку:

dataType: "json",

А в php-скрипте вместо


echo json_encode($arr);

так


echo $arr;
vlad00777
На сайте с 24.12.2009
Offline
119
#10

Всем спасибо! Проблему решил, как написал Оптимизайка, $("#subb").live("click", otp);

И все заработало! Спасибо всем не безразличным!

Хочу еще сказать что ivan-lev, настоящий профи, помогает смотрю в этой ветке всем и мне уже пару-тройку раз.

дани мапов, Убрал :) Не знал что так можно, спасибо за опыт.

Всем успехов!

12

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