I'm trying to create an AJAX form using XHR.
The code looks like:
body.on('click','.ajax-form', function (e) {
e.preventDefault();
document.getElementById('loader').style.display = 'block';
let xhr = new XMLHttpRequest();
let form = $(this);
let formAction = form.data('route');
let formData = new FormData(form);
xhr.open('POST', formAction);
xhr.addEventListener("load", loadHandler);
xhr.addEventListener("error", errorHandler);
function loadHandler() {
let jsonResponse = JSON.parse(xhr.responseText);
document.getElementById('loader').style.display = 'none';
if (jsonResponse.target) {
document.getElementById(jsonResponse.target).innerHTML = window.atob(jsonResponse.view);
$('#modal').modal('show');
}
if (jsonResponse.message) {
document.getElementById('toast-body').innerHTML = jsonResponse.message;
$('.modal-backdrop').remove();
$('#modal').modal('hide');
$('.toast').toast('show');
$(function () { $('.rateit').rateit()});
}
}
function errorHandler() {
document.getElementById('loader').style.display = 'none';
// request error
console.log('HTTP error', xhr.status, xhr.statusText);
}
// start request
xhr.send(formData);
});
In this format i get the error: Uncaught TypeError: Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'.
How can I get the HTMLFormElement using this (jQuery or not, I would prefer without jQuery). I searched for hours but couldn't find a solution.