Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.03.2016, 12:51
Аспирант
Отправить личное сообщение для ShutTap Посмотреть профиль Найти все сообщения от ShutTap
 
Регистрация: 12.11.2012
Сообщений: 70

Отправка формы после ajax проверки
Здравствуйте.
Есть форма, при отправке которой отсылается ajax запрос.
Проблема в том, что либо обрабатывается форма, либо отсылается ajax. Одновременно никак не хочет работать.
Сейчас сделал так: есть переменная sendAjax = true в начале, и если sendAjax = true то отправка формы блокируется preventDefault, идет отправка ajax. После завершения ajax меняем sendAjax = false и инициируем опять отправку формы через $('#myform').submit(), таким образом, при sendAjax = false уже должна была бы отправляться форма, а ajax нет. Однако этого не происходит. Видимо не успевает пменяться переменная или хз что. Но при повторном клике оправки формы отправляется уже именно форма.
Как сделать, чтобы отправлялся ajax, и после его выполнения и сама форма выполнялась?
Ответить с цитированием
  #2 (permalink)  
Старый 27.03.2016, 12:57
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

После проверки и ОК результата, отправлять форму .submit(), при этом если обработчик проверки установлен на событие onsubmit, то отключить обработку этого события.
Ответить с цитированием
  #3 (permalink)  
Старый 27.03.2016, 13:01
Аспирант
Отправить личное сообщение для ShutTap Посмотреть профиль Найти все сообщения от ShutTap
 
Регистрация: 12.11.2012
Сообщений: 70

после ОК результата отправляю .submit(), но обработчик проверки onsubmit не отключал.
сделал после ОК результата
$('#myform').unbind();
$('#myform').submit();
все равно не работает
Ответить с цитированием
  #4 (permalink)  
Старый 27.03.2016, 14:14
Аспирант
Отправить личное сообщение для ShutTap Посмотреть профиль Найти все сообщения от ShutTap
 
Регистрация: 12.11.2012
Сообщений: 70

проследил, когда после ОК ответа идет на форму, $("#myform").submit() ничего не происходит, и код дальше не выполняется...
в чем может быть причина?
Ответить с цитированием
  #5 (permalink)  
Старый 27.03.2016, 15:23
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от ShutTap
но обработчик проверки onsubmit не отключал.
А надо

$('#myform').on('submit', .....)

и

$('#myform').off('submit', ....);

после ответа сервера, это разве объяснения требует?
Ответить с цитированием
  #6 (permalink)  
Старый 27.03.2016, 16:39
Аспирант
Отправить личное сообщение для ShutTap Посмотреть профиль Найти все сообщения от ShutTap
 
Регистрация: 12.11.2012
Сообщений: 70

переделал
$("#myform").on("submit", function() { функция проверки и вызова функции ajax});

на ОК ответе от ajax ставлю
$("#myform").off("submit");
$("#myform").submit();

так?
ничего не происходит
Ответить с цитированием
  #7 (permalink)  
Старый 27.03.2016, 17:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

<?php
    if($_POST) {
      if($_POST['ajx']) exit('Y');
      else print_r($_POST);   
    }
?>
<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<style>

</style> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script> 
$(function() {
    $('form').on('submit', function(e) {
        e.preventDefault();
        $.post(location, $(this).serialize()+'&ajx=1', function(d) {
            if(!!d) {
                alert(d);
                $('form').off('submit').submit()
            }
        })
    })
});
</script>     
</head> 
<body>
<form method="post">
<input name="a" value="2" />
<button>GO</button>
</form>
</body> 
</html>


Работает?
Ответить с цитированием
  #8 (permalink)  
Старый 27.03.2016, 21:36
Аспирант
Отправить личное сообщение для ShutTap Посмотреть профиль Найти все сообщения от ShutTap
 
Регистрация: 12.11.2012
Сообщений: 70

ваш пример работает.

еще покопался, оказалось, форма может иметь разные поля, которые подгружаются сторонним сриптом.

в итоге, обработчик на форму вешается так:
$(document).ready(function(){
	formCheck();
});

$(document).ajaxComplete(function() {
	formCheck();
});

function formCheck(){
$('#myform').on('submit', function(event){

....


это как-то неправильно, да?
но иначе форма не видится после подгрузки полей. даже если поля не подгружали, без #(document).ready... все равно не видится...
Как было бы правильно сделать в данном случае, чтобы форма виделась после загрузки и дозагрузки страницы?
пробовал вешать
$(document).on('submit', '#myform', function(){}) но так не работает, при чем в ff пишет что на форме висит обработчик, в опере не висит, и в обоих случаях ничего не происходит

+ может из-за такой конструкции не работает off() и тд что хотелось бы? (ваш пример работает, но у меня такая конструкция на моей форме не работает...)

Последний раз редактировалось ShutTap, 27.03.2016 в 21:45.
Ответить с цитированием
  #9 (permalink)  
Старый 27.03.2016, 23:20
Аспирант
Отправить личное сообщение для ShutTap Посмотреть профиль Найти все сообщения от ShutTap
 
Регистрация: 12.11.2012
Сообщений: 70

запихнул ajax внутрь обработки формы, а не отдельной функцией, и назначил обработчики как
$(document).ready(function(){
$('#myform').on('submit', function(event){formCheck(event); event.preventDefault();});
})

и все заработало
спасибо большущее за уделенное время

Последний раз редактировалось ShutTap, 27.03.2016 в 23:24.
Ответить с цитированием
  #10 (permalink)  
Старый 06.04.2016, 11:56
Аспирант
Отправить личное сообщение для ShutTap Посмотреть профиль Найти все сообщения от ShutTap
 
Регистрация: 12.11.2012
Сообщений: 70

вновь по этой теме возникла проблема.
сайт, где это делается, использует jquery 1.8.3
у меня данный способ работает только если подключать jquery 1.9.0 (по крайней мерее после ее подключения работает).
Загвоздка в том, что поля формы обрабатываются еще скриптом сайта на 1.8.3, и при подключении 1.9.0 частично перестает работать.
Подскажите пожалуйста, как можно привести все к одному виду? В чем может быть проблема, что-то устарело, или конфликт?

на версии 1.9.0 клик - частично обрабатывается форма, отправляется ajax и отправляется форма
на версии 1.8.3 клик - полностью обрабатывается форма, отправляется ajax. Клик еще раз - отправляется форма.
(а должно быть все по одному клику)

Последний раз редактировалось ShutTap, 06.04.2016 в 12:01.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединить три конструкции проверки полей в одну golopogos Элементы интерфейса 0 27.01.2015 10:04
отправка ajax формы iskander83 Элементы интерфейса 2 19.05.2013 16:33
Отправка формы по ENTER (ajax) и перенос строки VEGA jQuery 18 01.03.2013 14:09
Сохранение результата ajax запроса после нажатия 'back' gregOlsen AJAX и COMET 5 18.11.2009 12:23
Передача фокуса из формы после ввода символа kuh Общие вопросы Javascript 2 08.03.2009 19:50