Spaces:
Running
Running
(function () { | |
"use strict"; | |
let forms = document.querySelectorAll('.php-email-form'); | |
forms.forEach( function(e) { | |
e.addEventListener('submit', function(event) { | |
event.preventDefault(); | |
let thisForm = this; | |
let action = thisForm.getAttribute('action'); | |
let recaptcha = thisForm.getAttribute('data-recaptcha-site-key'); | |
if( ! action ) { | |
displayError(thisForm, 'The form action property is not set!') | |
return; | |
} | |
thisForm.querySelector('.loading').classList.add('d-block'); | |
thisForm.querySelector('.error-message').classList.remove('d-block'); | |
thisForm.querySelector('.sent-message').classList.remove('d-block'); | |
let formData = new FormData( thisForm ); | |
if ( recaptcha ) { | |
if(typeof grecaptcha !== "undefined" ) { | |
grecaptcha.ready(function() { | |
try { | |
grecaptcha.execute(recaptcha, {action: 'php_email_form_submit'}) | |
.then(token => { | |
formData.set('recaptcha-response', token); | |
php_email_form_submit(thisForm, action, formData); | |
}) | |
} catch(error) { | |
displayError(thisForm, error) | |
} | |
}); | |
} else { | |
displayError(thisForm, 'The reCaptcha javascript API url is not loaded!') | |
} | |
} else { | |
php_email_form_submit(thisForm, action, formData); | |
} | |
}); | |
}); | |
function php_email_form_submit(thisForm, action, formData) { | |
fetch(action, { | |
method: 'POST', | |
body: formData, | |
headers: {'X-Requested-With': 'XMLHttpRequest'} | |
}) | |
.then(response => { | |
if( response.ok ) { | |
return response.text() | |
} else { | |
throw new Error(`${response.status} ${response.statusText} ${response.url}`); | |
} | |
}) | |
.then(data => { | |
thisForm.querySelector('.loading').classList.remove('d-block'); | |
if (data.trim() == 'OK') { | |
thisForm.querySelector('.sent-message').classList.add('d-block'); | |
thisForm.reset(); | |
} else { | |
throw new Error(data ? data : 'Form submission failed and no error message returned from: ' + action); | |
} | |
}) | |
.catch((error) => { | |
displayError(thisForm, error); | |
}); | |
} | |
function displayError(thisForm, error) { | |
thisForm.querySelector('.loading').classList.remove('d-block'); | |
thisForm.querySelector('.error-message').innerHTML = error; | |
thisForm.querySelector('.error-message').classList.add('d-block'); | |
} | |
})(); | |