Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.07.2015, 13:21
Интересующийся
Отправить личное сообщение для Alexei91 Посмотреть профиль Найти все сообщения от Alexei91
 
Регистрация: 13.09.2013
Сообщений: 25

Несколько ajax форм на странице
Привет, подскажите ответ на такой вопрос. Есть несколько форм на одной странице, которые обрабатываются таким кодом, письмо отправляет, но в success возвращает код первой формы на странице. Подскажите как можно в success выбрать именно ту форму, по которой был сделан сабмит?
$('.popular__buttons').ready(function () {
    $(document).on("submit", ".popup__form", function (e) {
        e.preventDefault();
        var m_method = $(this).attr('method');
        var m_action = $(this).attr('action');
        var m_data = $(this).serialize();
            $.ajax({
                type: m_method,
                url: m_action,
                data: m_data,
                success: function (result) {
                    var data = $(result).find('.popup').html();
                    $('.popup').html(data);
                    $('.popup__close').click(function () {
                        $('.popup').hide();
                    })
                }
    });
    });
});
Ответить с цитированием
  #2 (permalink)  
Старый 14.07.2015, 13:36
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,252

Сообщение от Alexei91
как можно в success выбрать именно ту форму, по которой был сделан сабмит?
Например воспользоваться замыканием и "передать" в обработчик ссылку на ту форму.
Только и обработчик придется переписать, т.к. в нем нет никакой "привязки" к форме...
Ответить с цитированием
  #3 (permalink)  
Старый 14.07.2015, 14:01
Интересующийся
Отправить личное сообщение для Alexei91 Посмотреть профиль Найти все сообщения от Alexei91
 
Регистрация: 13.09.2013
Сообщений: 25

к сожалению обработчик трогать не в коем случае нельзя.
эх...как бы было просто
success:$(this).ready( function (result) {
                    var data = $(result).find('.popup').html();
                    $('.popup').html(data);
                    $('.popup__close').click(function () {
                        $('.popup').hide();
                    })
                });

сорри за оффтоп, не первый раз с этой проблемой сталкиваюсь и не представляю как решить
Ответить с цитированием
  #4 (permalink)  
Старый 14.07.2015, 16:13
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Alexei91
Подскажите как можно в success выбрать именно ту форму, по которой был сделан сабмит?
$(this) до $.ajax чем не устраивает?
Ответить с цитированием
  #5 (permalink)  
Старый 15.07.2015, 14:34
Интересующийся
Отправить личное сообщение для Alexei91 Посмотреть профиль Найти все сообщения от Alexei91
 
Регистрация: 13.09.2013
Сообщений: 25

в success всё равно перезагружает всю страницу и находит элемент с первым попавшимся классом и естественно эти данные подставляет. А мне нужны данные именно этой формы
Ответить с цитированием
  #6 (permalink)  
Старый 15.07.2015, 15:43
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

$(document).on("submit", ".popup__form", function (e) {
    e.preventDefault();
    var f = this //запомнили текущую форму
    ......
    success: function (result) {
        //f никак не будет равна иной форме
        //а перезагрузка страницы может быть только в том случае
        //если это сделать принудительно, ибо -  e.preventDefault();


Разберитесь с логикой кода своего.
Ответить с цитированием
  #7 (permalink)  
Старый 15.07.2015, 18:27
Интересующийся
Отправить личное сообщение для Alexei91 Посмотреть профиль Найти все сообщения от Alexei91
 
Регистрация: 13.09.2013
Сообщений: 25

Вот никак не выходит как Вы говорите. Конечно ясно, что я что-то не понимаю. Но как я понимаю логику. Отправляем данные по клику, после этого получаем их в
success: function (result) {
. После этого находим полученные данные, которые выдал обработчик
var data = $(result).find('.popup').html();
- если есть ошибки в заполнении, значит неудачная отправка, если нет текст благодарности и вставляем вместо моей формы
$('.popup').html(data);
. Но я ищу форму уже в результате, который вернул сервер и тут я не могу понять как найти именно ту форму, которую я отправил и именно в ту, которою отправил.
Ответить с цитированием
  #8 (permalink)  
Старый 15.07.2015, 20:17
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Ничего не понятно:

что возвращает result?
Ответить с цитированием
  #9 (permalink)  
Старый 15.07.2015, 22:45
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от Alexei91
Отправляем данные по клику, после этого получаем их в
success: function (result) {

. После этого находим полученные данные, которые выдал обработчик
var data = $(result).find('.popup').html();
В месте переноса, в пустой строке, находится конец нормальной логики и начало какого бреда.

Интерактивность в норме такова: скрипт делает запрос - браузер его посылает серверу - сервер отвечает - браузер передает скрипту - скрипт разбирается что ответил сервер - разобравшись скрипт отдает данные функции которая куда-то их применяет. Конец.

Что значит "После этого находим полученные данные"? если искать ничего не надо - все что получено находится в суксессе и другого ничего не может быть получено иным путем.

Почитайте как устроен аякс. Похоже придумали какое-то свое мировоззрение на эту технологию и пытаетесь его на практике продолбить.

Кстати сервер НЕ должен отгружать аяксом форму, хтмл формы - это бред. Форма уже есть, ранее получена при загрузке страницы или нарисована скриптом. Сервер отдает только данные - чисто для подтверждения что все прошло ок или были проблемы.

Как вы сделаете это - особыми переменными в json (само собой сервер должен отдавать такое в json), или статусами из заголовков - не важно. Важно уметь различать ОК и сообщение об ошибке и выводить сообщение.

Чтобы страница перегрузилась после ОКей надо это сделать принудительно через location. Если адрес другой - то передать его в жисоне же.
Ответить с цитированием
  #10 (permalink)  
Старый 15.07.2015, 22:50
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Нашел пример, корявый, давно писан, но суть передает.

link_onload = function(res) {
			
		try {
			if(res.status!=200)
				throw res.status+' '+res.statusText;
				
			var data=JSON.parse(res.responseText);

			/* redirect */
			if(typeof data.Location!==U) {
				W.removeEventListener('beforeunload',saving_tip,false);
				return W.location.assign(data.Location);
			}
			/* update some elem */
			else if(typeof data.element_id!==U) {

/* далее идут проверки на что еще годится респонзе */
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько одинаковых форм обратной связи на одной странице stalex jQuery 14 24.04.2018 17:25
Несколько форм с ajax на странице igro AJAX и COMET 3 24.03.2015 20:56
Ajax+js+5 форм обратной связи на одной странице aleksandr8i AJAX и COMET 0 01.04.2014 10:04
AJAX несколько элементов на странице... myocean AJAX и COMET 2 12.11.2012 12:27
AJAX несколько элементов на странице... myocean jQuery 3 12.11.2012 00:00