Вход

Просмотр полной версии : Ajax запрос через метод submit()


n0kkw1n
15.12.2016, 23:16
Доброго времени суток, возникла такая задача раньше использовал всегда 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, как подключить его не пойму

laimas
16.12.2016, 06:40
onSubmit : function( form ) - отменить действие по умолчанию и передать форму в postAjax. URL собственно в атрибуте формы указан, передавать его аргументом вроде бы как и нет необходимости.

n0kkw1n
16.12.2016, 10:26
laimas, но все равно ведь получается в функцию упаковывать иначе как по другому?

function post_ajax() {
postAjax('post.php', form, callback);
}

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

n0kkw1n
16.12.2016, 21:07
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

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

n0kkw1n
16.12.2016, 22:25
Rise через serialize()


function send()
{
//Получаем параметры
var data = $('#theForm').serialize()
// Отсылаем паметры
$.post("post.php", data, function(data) {
$(".final-message").html(data);
}
);}

n0kkw1n
16.12.2016, 22:35
Rise, По сути не отличается

n0kkw1n
16.12.2016, 22:47
Rise, По сути ничем не отличается, все сообразил, спасибо за разъяснение