Это действительно довольно открытый вопрос. Вы не предоставили никаких сведений о модели, в которой данные должны быть представлены как. Я собираюсь предположить, что вам нужен объект, подобный приведенному ниже.
{
first: 'John',
last: 'Smith'
}
Если это так, вы можете использовать приведенный ниже код.
var serializeForm = function (form) {
// Setup our serialized data
var serialized = {};
// Loop through each field in the form
for (var i = 0; i < form.elements.length; i++) {
var field = form.elements[i];
// Don't serialize fields without a name, submits, buttons, file and reset inputs, and disabled fields
if (!field.name || field.disabled || field.type === 'file' || field.type === 'reset' || field.type === 'submit' || field.type === 'button') continue;
// If a multi-select, get all selections
if (field.type === 'select-multiple') {
for (var n = 0; n < field.options.length; n++) {
if (!field.options[n].selected) continue;
serialized[field.name] = field.options[n].value
}
}
// Convert field data to a query string
else if ((field.type !== 'checkbox' && field.type !== 'radio') || field.checked) {
serialized[field.name] = field.value
}
}
return serialized;
};
Тогда вы можете использовать Ваш код ...
form.addEventListener('submit', sendData)
function sendData(event){
//retreives form input
const formData = serializeForm(form);
var xhr = new XMLHttpRequest();
var url = "YOUR_ENDPOINT_NEEDS_TO_GO_HERE";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var json = JSON.parse(xhr.responseText);
console.log(json);
}
};
var data = JSON.stringify(formData);
xhr.send(data);
}
Вы можете увидеть вышеупомянутое, используя кодовую ручку, связанную здесь . В этом примере объект создается немедленно, поэтому щелкните правой кнопкой мыши в любом месте окна предварительного просмотра, просмотрите консоль, и вы увидите выходные данные метода serializeForm.
Кредит идет на: https://gomakethings.com/how-to-serialize-form-data-with-vanilla-js/, откуда я получил исходный код и изменил его для ваших (предполагаемых) потребностей.