0 / 0 / 0
Регистрация: 09.05.2016
Сообщений: 19

Отмена отправки формы

07.08.2024, 12:20. Показов 878. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть обработчик в котором есть AJAX запрос на test.php. У формы action="https://test.ru".
Как запретить отправку формы на https://test.ru, при условии что data не равно ok?
Если data равно ok, то форму отправлять

HTML5
1
2
3
4
<form class="form" action="https://test.ru" method="POST">
    <input type="text" class="name" name="name" value="">
    <button type="submit" formtarget="_blank">Отправить</button>
</form>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$('.form').submit(function() {
var name = $(".name").val();
    $.ajax({
        type: "POST",
        url: 'test.php',
        data: {'name': name},
        dataType: "html",
        success: function(data){
            if(data == 'ok'){ 
                alert("ok");          
            }
            else{
                alert("error");
                return false;
            };
        }
    });                             
});

test.php
PHP
1
echo $_POST['name'];

Этот вариант отправляет форму на https://test.ru даже если data не равно ok, несмотря на return false;
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.08.2024, 12:20
Ответы с готовыми решениями:

Отмена отправки формы на сервер
Добрый вечер всем. Есть задача отправить AJAX'ом файл на сервер и обработать его php скриптом. Дело в том, что это должно происходить по...

Отмена отправки формы в обработчике внутри AJAX
Всем привет! Не могу понять как сделать вроде бы элементарную весчь: Есть форма, есть кнопка Отправить: &lt;input...

Отмена отправки формы в обработчике внутри AJAX
Ajax: $(function() { $('#popup1btn, #popup2btn, #popup3btn, #popup4btn').click(function() { data = 'id=' +...

12
 Аватар для voraa
1292 / 1269 / 189
Регистрация: 21.01.2024
Сообщений: 5,865
07.08.2024, 12:25
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$('.form').submit(function(ev) {
var name = $(".name").val();
    ev.preventDefault();
    $.ajax({
        type: "POST",
        url: 'test.php',
        data: {'name': name},
        dataType: "html",
        success: function(data){
            if(data == 'ok'){ 
                alert("ok");          
            }
            else{
                alert("error");
                return false;
            };
        }
    });                             
});
возврат false в функции, которая вызывается по success ничего дать не может.
action и method в form тоже можно не указывать, т.к. обращение к серверу все равно пойдет только по ajax.
0
0 / 0 / 0
Регистрация: 09.05.2016
Сообщений: 19
07.08.2024, 12:29  [ТС]
Это не работает, теперь в любом случае форма не отправляется на https://test.ru
Нужно чтобы она отправлялась если data = ok
0
 Аватар для voraa
1292 / 1269 / 189
Регистрация: 21.01.2024
Сообщений: 5,865
07.08.2024, 12:33
Так а вы чего хотите то? И данные получить с данные получить с 'test.php' и форму отправить на https://test.ru, если данные пришли?
Вряд ли такое возможно.
Как только отработает обработчик события submit (он пошлет запрос на 'test.php') сразу будет послан запрос на https://test.ru. Ждать, когда придут данные с test.php никто не будет.
Можно попробовать сделать синхронный запрос. Хотя это не рекомендуется
0
0 / 0 / 0
Регистрация: 09.05.2016
Сообщений: 19
07.08.2024, 12:37  [ТС]
именно так
0
 Аватар для voraa
1292 / 1269 / 189
Регистрация: 21.01.2024
Сообщений: 5,865
07.08.2024, 12:51
Лучший ответ Сообщение было отмечено Игорь22 как решение

Решение

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$('.form').submit(function(ev) {
var name = $(".name").val();
    $.ajax({
        type: "POST",
        url: 'test.php',
        data: {'name': name},
        dataType: "html",
        async: false,
        success: function(data){
            if(data == 'ok'){ 
                alert("ok");          
            }
            else{
                alert("error");
                ev.preventDefault();
            };
        }
    });                             
});
Добавлено через 12 минут
Или так попробовать. По клику на кнопку отправляем запрос на test.php, когда пришли нужные данные делаем submit формы
HTML5
1
2
3
4
<form class="form" action="https://test.ru" method="POST" target="_blank">
    <input type="text" class="name" name="name" value="">
    <button id="but" type="button">Отправить</button>
</form>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$('#but').click(function() {
var name = $(".name").val();
    $.ajax({
        type: "POST",
        url: 'test.php',
        data: {'name': name},
        dataType: "html",
        success: function(data){
            if(data == 'ok'){ 
                alert("ok"); 
                $('.form').trigger( 'submit')       
            }
            else{
                alert("error");
            };
        }
    });                             
});
1
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3844 / 1703 / 431
Регистрация: 14.03.2022
Сообщений: 4,350
07.08.2024, 12:54
Предложу такой вариант...

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$('.form').submit(function(ev) {
    ev.preventDefault();
    var name = $(".name").val();
    $.ajax({
        type: "POST",
        url: 'test.php',
        data: {'name': name},
        dataType: "html",
        success: function(data){
            if(data == 'ok'){ 
                alert("ok"); 
                // собственно отправка формы
                this.submit()
            }
            else{
                alert("error");
                return false;
            };
        }
    });                             
});
0
 Аватар для voraa
1292 / 1269 / 189
Регистрация: 21.01.2024
Сообщений: 5,865
07.08.2024, 12:58
Цитата Сообщение от krvsa Посмотреть сообщение
Предложу такой вариант...
А по this.submit() не сработает снова обработчик submit?
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3844 / 1703 / 431
Регистрация: 14.03.2022
Сообщений: 4,350
07.08.2024, 15:53
Цитата Сообщение от voraa Посмотреть сообщение
А по this.submit() не сработает снова обработчик submit?
Я проверял...

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="https://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>
<form>
    <input />
    <button>Test</button>
</form>
<script>
$('form').submit(function(ev) {
    alert(1)
    ev.preventDefault();
    new Promise(res => setTimeout(_ => {
        alert(2)
        this.submit()
    }, 2000))
});
</script>
</body>
</html>
0
 Аватар для voraa
1292 / 1269 / 189
Регистрация: 21.01.2024
Сообщений: 5,865
07.08.2024, 16:21
Цитата Сообщение от krvsa Посмотреть сообщение
Я проверял...
И действительно.
Оказывается метод submit просто передает форму, не запуская события.
И есть метод requestSubmit, который передает форму и запускает событие.

Век живи - век учись.
0
0 / 0 / 0
Регистрация: 09.05.2016
Сообщений: 19
08.08.2024, 19:14  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
Предложу такой вариант...
К сожалению не работает (не отправляет форму на https://test.ru)

Добавлено через 18 минут
Цитата Сообщение от voraa Посмотреть сообщение
Или так попробовать.
в некоторых браузерах блокируется всплывающее сообщение (firefox)
0
 Аватар для voraa
1292 / 1269 / 189
Регистрация: 21.01.2024
Сообщений: 5,865
08.08.2024, 19:26
Цитата Сообщение от Игорь22 Посмотреть сообщение
в некоторых браузерах блокируется всплывающее сообщение (firefox)
Тут уж ничего не поделать. Отправка формы через метод submit а не по клику на кнопке и открытие результата в другом окне может блокироваться браузером, как постороннее всплывающее окно. Надо давать разрешение в этом случае.

Цитата Сообщение от Игорь22 Посмотреть сообщение
К сожалению не работает
Там скорее всего надо (стр 13)
JavaScript
1
$('.form').submit()
Но блокировка всплывающего окна все равно будет.
0
0 / 0 / 0
Регистрация: 09.05.2016
Сообщений: 19
08.08.2024, 19:32  [ТС]
Цитата Сообщение от voraa Посмотреть сообщение
Там скорее всего надо (стр 13)
тоже самое.
работает только вариант с async: false во всех браузерах, даже в самых старых и без всплывающего окна. спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.08.2024, 19:32
Помогаю со студенческими работами здесь

Отмена отправки данных при клике на кнопку
Доброго времени суток, форумчане) Есть такой код: $(document).ready(function() { $(document).on('click',...

Отправка формы. формы бутстрапа. открытие второй формы после отправки первой
&lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot; data-bs-toggle=&quot;modal&quot; data-bs-target=&quot;#mainModal&quot;&gt; главная форма &lt;/button&gt; &lt;div...

Вывод модальной формы после отправки формы AJAX
Здравствуйте, помогите, пожалуйста, разобраться, есть модальная форма arcticmodal для просмотра этой формы можно найти её в поисковике, она...

Защита от повторной отправки формы
Привет. Есть форма, пусть для примера это будет форма отправки комментариев. С помощью плагина jquery.form.js форма отправляется на...

Очистка формы после отправки
Всем привет. Есть сайт на нем есть несколько форм для отправки заказа. Если, например нажать на кнопку в шапке &quot;заказать звонок&quot;,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru