Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 09.05.2016
Сообщений: 19

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

07.08.2024, 12:20. Показов 824. Ответов 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
1233 / 1125 / 175
Регистрация: 21.01.2024
Сообщений: 5,127
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
1233 / 1125 / 175
Регистрация: 21.01.2024
Сообщений: 5,127
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
1233 / 1125 / 175
Регистрация: 21.01.2024
Сообщений: 5,127
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
3806 / 1643 / 428
Регистрация: 14.03.2022
Сообщений: 4,086
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
1233 / 1125 / 175
Регистрация: 21.01.2024
Сообщений: 5,127
07.08.2024, 12:58
Цитата Сообщение от krvsa Посмотреть сообщение
Предложу такой вариант...
А по this.submit() не сработает снова обработчик submit?
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3806 / 1643 / 428
Регистрация: 14.03.2022
Сообщений: 4,086
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
1233 / 1125 / 175
Регистрация: 21.01.2024
Сообщений: 5,127
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
1233 / 1125 / 175
Регистрация: 21.01.2024
Сообщений: 5,127
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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru