Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.12.2016, 23:16
Новичок на форуме
Отправить личное сообщение для n0kkw1n Посмотреть профиль Найти все сообщения от n0kkw1n
 
Регистрация: 15.12.2016
Сообщений: 7

Ajax запрос через метод submit()
Доброго времени суток, возникла такая задача раньше использовал всегда Jquery, а сейчас необходимо отправить запрос AJAX на чистом JS,
создал объект XMLHttpRequest:
function createXMLHttp() {
        if (typeof XMLHttpRequest != "undefined") { //  аля Mozilla
            return new XMLHttpRequest();
        } else if (window.ActiveXObject) { // для IE 
            var aVersions = [
                "MSXML2.XMLHttp.5.0",
                "MSXML2.XMLHttp.4.0",
                "MSXML2.XMLHttp.3.0",
                "MSXML2.XMLHttp",
                "Microsoft.XMLHttp"
            ];
            for (var i = 0; i < aVersions.length; i++) {
                try {
                    var oXmlHttp = new ActiveXObject(aVersions[i]);
                    return oXmlHttp;
                } catch (oError) {}
            }
            throw new Error("Невозможно создать объект XMLHttp.");
        }
    }
// упаковка формы
function getRequestBody(oForm) {
    var aParams = new Array();
    for (var i = 0; i < oForm.elements.length; i++) {
        var sParam = encodeURIComponent(oForm.elements[i].name);
        sParam += "=";
        sParam += encodeURIComponent(oForm.elements[i].value);
        aParams.push(sParam);
    }
    return aParams.join("&");
}
// функция Ajax POST
function postAjax(url, oForm, callback) { 
    // создаем Объект
    var oXmlHttp = createXMLHttp();
    // получение данных с формы
    var sBody = getRequestBody(oForm);
    // подготовка, объявление заголовков
    oXmlHttp.open("POST", url, true);
    oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    // описание функции, которая будет вызвана, когда придет ответ от сервера
    oXmlHttp.onreadystatechange = function() {
        if (oXmlHttp.readyState == 4) {
            if (oXmlHttp.status == 200) {
                callback(oXmlHttp.responseText);
            } else {
                callback('error' + oXmlHttp.statusText);
            }
        }
    };
    // отправка запроса, строка данных с формы
    oXmlHttp.send(sBody);
}

И сама форма:
var theForm = document.getElementById( 'theForm' );
 
            new stepsForm( theForm, {
                onSubmit : function( form ) {
                    classie.addClass( theForm.querySelector( '.simform-inner' ), 'hide' );
 
                    form.submit();//отправка формы
                    
                    var messageEl = theForm.querySelector( '.final-message' );
                    messageEl.innerHTML = 'Спасибо, Ваша анкета отправлена';
                    classie.addClass( messageEl, 'show' );
                }
            } );


Все работает как надо, но хотелось бы сделать отправку через AJAX и выводилось .final-message, как подключить его не пойму
Ответить с цитированием
  #2 (permalink)  
Старый 16.12.2016, 06:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

onSubmit : function( form ) - отменить действие по умолчанию и передать форму в postAjax. URL собственно в атрибуте формы указан, передавать его аргументом вроде бы как и нет необходимости.
Ответить с цитированием
  #3 (permalink)  
Старый 16.12.2016, 10:26
Новичок на форуме
Отправить личное сообщение для n0kkw1n Посмотреть профиль Найти все сообщения от n0kkw1n
 
Регистрация: 15.12.2016
Сообщений: 7

laimas, но все равно ведь получается в функцию упаковывать иначе как по другому?
function post_ajax() {
			postAjax('post.php', form, callback);
		}

и как callback связать не пойму что бы выводился messageEl в конце, Тоже функцию прописывать? Вообщем JS гораздо мудренее чем его краткая форма Jquery

Последний раз редактировалось n0kkw1n, 16.12.2016 в 10:43.
Ответить с цитированием
  #4 (permalink)  
Старый 16.12.2016, 21:07
Новичок на форуме
Отправить личное сообщение для n0kkw1n Посмотреть профиль Найти все сообщения от n0kkw1n
 
Регистрация: 15.12.2016
Сообщений: 7

Rise,
Сделал вот как, но в конце выводится то что в post.php
var theForm = document.getElementById( 'theForm' );

			new stepsForm( theForm, {
				onSubmit : function( form ) {
					classie.addClass( theForm.querySelector( '.simform-inner' ), 'hide' );
					//form.submit()
function post_ajax() {					
postAjax('post.php', form, function(response) {
    messageEl.innerHTML = response;
	response = 'Спасибо, Ваша анкета отправлена';
});
};
post_ajax();

					var messageEl = theForm.querySelector( '.final-message' );
					classie.addClass( messageEl, 'show' );
				}
				

			} );

а необходимо messageEl.innerHTML
Ответить с цитированием
  #5 (permalink)  
Старый 16.12.2016, 21:55
Новичок на форуме
Отправить личное сообщение для n0kkw1n Посмотреть профиль Найти все сообщения от n0kkw1n
 
Регистрация: 15.12.2016
Сообщений: 7

Rise, форма просто на js весь код придется переписывать так бы и ajax на jquery сделал вот и ломаю голову так как до этого на js не работал

Последний раз редактировалось n0kkw1n, 16.12.2016 в 22:01.
Ответить с цитированием
  #6 (permalink)  
Старый 16.12.2016, 22:25
Новичок на форуме
Отправить личное сообщение для n0kkw1n Посмотреть профиль Найти все сообщения от n0kkw1n
 
Регистрация: 15.12.2016
Сообщений: 7

Rise через serialize()

function send()
{
//Получаем параметры
var data = $('#theForm').serialize()
// Отсылаем паметры
$.post("post.php", data, function(data) {
$(".final-message").html(data);
}
);}
Ответить с цитированием
  #7 (permalink)  
Старый 16.12.2016, 22:35
Новичок на форуме
Отправить личное сообщение для n0kkw1n Посмотреть профиль Найти все сообщения от n0kkw1n
 
Регистрация: 15.12.2016
Сообщений: 7

Rise, По сути не отличается
Ответить с цитированием
  #8 (permalink)  
Старый 16.12.2016, 22:47
Новичок на форуме
Отправить личное сообщение для n0kkw1n Посмотреть профиль Найти все сообщения от n0kkw1n
 
Регистрация: 15.12.2016
Сообщений: 7

Rise, По сути ничем не отличается, все сообразил, спасибо за разъяснение
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax запрос через прокси! LungDesire jQuery 2 21.12.2015 09:42
как передать php массивы через ajax Evsik AJAX и COMET 11 11.07.2015 06:32
Передача через AJAX большого объема данных yambbkru AJAX и COMET 3 20.06.2015 15:18
Перестает работать галерея при загрузке через Ajax (Need help) Clodan jQuery 0 20.04.2015 20:18
Проблема с обработкой селектов html кода, пришедшего через ajax запрос Rage jQuery 6 26.01.2009 14:15