Вход

Просмотр полной версии : Как отменить e.preventDefault();?


ilyamaksimov
24.08.2017, 19:12
Всем привет!
Можно ли как то при условии когда if( typeof data == "undefined") отменить e.preventDefault();

Проблема такая: вначале форма была без проверки Ajax-ом, до этого проверял с помощью Php (перед отправкой запроса в БД) и при успешном добавлении данных в БД, производился редирект на новую страницу, и с помощью $_SESSION['res']

<?php if (isset($_SESSION['res'])){
echo $_SESSION['res'];
unset($_SESSION['res']);
}
?>
выводилось сообщение-"Данные успешно добавлены".

Сейчас при условии if( typeof data == "undefined") приходится делать редирект на нужную страницу с помощью js метода, но сообщение об успешном добавлении данных в бд не получается вывести

$('#form_new_request').submit(function (e) {
e.preventDefault();
$.ajax({
url: "?views=new_application",
type: "POST",
dataType: "html",
data: $('#form_new_request').serialize() ,
success: function (res) {

$('.success-error').html(''); // удаляю html



var element = $(res).find('#error');
var data = $(res).find('.success-error').html(); //если ответ

if(typeof data == "undefined") {

window.location.href ='/index.php?views=all_application'; // вместо переадресации можно ли отменить e.preventDefault();?
}else {

$('.success-error').prepend(element); // вставляю результат сюда

}
}
});

});

laimas
24.08.2017, 19:35
но сообщение об успешном добавлении данных в бд не получается вывести


Это почему? Удалить диалог посредством $(res).find('#error'); и прочим, на json к примеру, и если нет ошибки, то "Данные успешно добавлены" и клиент может показать, после чего переход.

ilyamaksimov
24.08.2017, 19:41
Это почему? Удалить диалог посредством $(res).find('#error'); и прочим, на json к примеру, и если нет ошибки, то "Данные успешно добавлены" и клиент может показать, после чего переход.

Сообщение нужно показать на новой странице, на которую делаю переход:)

Если я каим-то образом отменю e.preventDefault() то страница сама сделает редирект (с помощью Php) и выведет сообщение

laimas
24.08.2017, 19:46
Сообщение нужно показать на новой странице, на которую делаю переход

На здоровье, показывайте, адрес перехода может содержать и GET параметр, по которому сервер поймет, что нужно сообщить "Привет, Вася". Какие проблемы?

e.preventDefault(); отменить нельзя, эта операция совершилась - форма не была отправлена естественным образом, если же можно было это и произвести, то это бы означало повторное отправление формы, вам это нужно? Вряд ли.

PS. Никто не запрещает использовать сессию и при асинхронном обмене, так что проблема надуманная.

ilyamaksimov
24.08.2017, 19:53
На здоровье, показывайте, адрес перехода может содержать и GET параметр, по которому сервер поймет, что нужно сообщить "Привет, Вася". Какие проблемы?

e.preventDefault(); отменить нельзя, эта операция совершилась - форма не была отправлена естественным образом, если же можно было это и произвести, то это бы означало повторное отправление формы, вам это нужно? Вряд ли.

PS. Никто не запрещает использовать сессию и при асинхронном обмене, так что проблема надуманная.

блин про GET параметр я не подумал! Огромное спасибо, под вечер туплю.

ilyamaksimov
24.08.2017, 20:02
На здоровье, показывайте, адрес перехода может содержать и GET параметр, по которому сервер поймет, что нужно сообщить "Привет, Вася". Какие проблемы?

e.preventDefault(); отменить нельзя, эта операция совершилась - форма не была отправлена естественным образом, если же можно было это и произвести, то это бы означало повторное отправление формы, вам это нужно? Вряд ли.

PS. Никто не запрещает использовать сессию и при асинхронном обмене, так что проблема надуманная.
Хотя подумал сейчас, это сообщение будет висеть пока пользователь не обновит страницу (т.е. пока этот GET параметр будет висеть).
А с помощью сессий сообщение показывается один раз и исчезает

<?php if (isset($_SESSION['res'])){
echo $_SESSION['res'];
unset($_SESSION['res']);
}
?>

ilyamaksimov
24.08.2017, 20:07
У меня на той странице на которую делаю редирект форма с сортировкой, пагинация, и Get параметры просто добавляются в адресную строку и сообщение об успешном добавлении в базу данных будет висеть и глаза мозолить если его не убрать

ilyamaksimov
24.08.2017, 20:09
PS. Никто не запрещает использовать сессию и при асинхронном обмене, так что проблема надуманная.

подскажи пожалуйста как использовать сессию при ajax ?

laimas
24.08.2017, 20:25
Хотя подумал сейчас, это сообщение будет висеть пока пользователь не обновит страницу
А с помощью сессий сообщение показывается один раз и исчезает

Это разве не бред?

ilyamaksimov
25.08.2017, 10:18
Это разве не бред?

объясню как я тебя понял.

ты предлагаешь сделать переадресацию на страницу с добавлением гет параметра
window.location.href ='/index.php?views=all_application&result=saccess';

на странице (на которой переадресовываю) сделать проверку

if ($_GET['result']== 'saccess'){
echo "Сообщение об успешном добавлении данных в базу данных"
}

Проблема в том что у меня на этой странице пагинация + фильтры которые тоже работают через GET

http://s019.radikal.ru/i611/1708/18/d502e7b45238.png (http://radikal.ru)

и получается что пользователь будет видеть сообщение об "успешном добавлении данных в базу данных" пока не обновит страницу, а это в моем случае неудобно потому что он (пользователь) на этой странице может захотеть воспользоваться фильтрами (сообщение будет ему мозолить глаза)

ilyamaksimov
25.08.2017, 10:20
вот я и говорю что пользуясь SESSION, этой проблемы нет
<?php if (isset($_SESSION['res'])){
echo $_SESSION['res'];
unset($_SESSION['res']);
}
?>

ilyamaksimov
25.08.2017, 10:21
вот я и говорю что пользуясь SESSION, этой проблемы нет
<?php if (isset($_SESSION['res'])){
echo $_SESSION['res'];
unset($_SESSION['res']);
}
?>

с GET так не получится

laimas
25.08.2017, 13:05
Проблема в том что у меня на этой странице пагинация + фильтры которые тоже работают через GET

А вас кто-то заставляет вставлять и в ссылки навигатора GET параметр предписывающий показать сообщение?

laimas
25.08.2017, 13:05
с GET так не получится

Это почему? Кто ведает сессиями?