MktoForms2 :: Force known TLD - DNS API
by sanford
HTML
<script src="//app-sj01.marketo.com/js/forms2/js/forms2.min.js"></script>
<form id="mktoForm_169"></form>
JavaScript
MktoForms2.loadForm("//app-sj01.marketo.com", "410-XOR-673", 169)
MktoForms2.whenReady(function(form) {
var emailExtendedValidationError = 'Doesn\'t sound like a real TLD!',
emailField = 'Email',
emailFieldSelector = '#' + emailField,
validationComplete = false;
form.onValidate(function(valid) {
form.submittable(validationComplete); // we'll need to reenable on cb either way
if (!form.submittable()) {
debugger;
console.log('performing secondary validation');
var currentTLD = form.vals()[emailField].split('.').pop();
dnsDomainExists(currentTLD, function(exists) {
if ( !exists ) {
form.showErrorMessage(emailExtendedValidationError, form.getFormElem().find(emailFieldSelector));
} else {
validationComplete = true;
form.submit();
}
});
} else {
console.log('form will submit');
}
});
function dnsDomainExists(dnsDomain, callback) {
var dnsAPIURL = 'http://api.statdns.com/' + dnsDomain + '/ns ',
xdr;
if ( window.XDomainRequest ) {
xdr = new XDomainRequest;
xdr.open('GET', dnsAPIURL); // IE8: HEAD + other peccadilloes
} else {
xdr = new XMLHttpRequest;
xdr.open('HEAD', dnsAPIURL);
}
xdr.onerror = function() {
if ( xdr instanceof XMLHttpRequest ) {
alert('Unhandled error');
} else {
console.log('XDR handled error: API returned failure');
callback(false);
}
};
xdr.onload = function() {
if ( xdr.status == 200 ) {
console.log('XHR handled success: API returned success');
callback(true);
} else if (xdr instanceof XMLHttpRequest) {
console.log('XHR handled success: API returned failure');
callback(false);
}...