Basic AJAX Form Submission Demo (with reCaptcha v3)
<form id="myFormId" action="/forms/cases.ashx?form=demo_ajax_example-recaptcha_v3&isSubscription=false" name="demo_ajax_example-recaptcha_v3" method="post" enctype="multipart/form-data"> <label for="FirstName">First Name</label> <input type="text" id="FirstName" name="FirstName" required> <label for="LastName">Last Name</label> <input type="text" id="LastName" name="LastName" required> <label for="Email">Email</label> <input type="email" id="Email" name="Email" required> <label for="NotRequired">Not Required</label> <input type="text" id="NotRequired" name="NotRequired" > <script> 'use strict';grecaptcha.ready(function(){function e(a){grecaptcha.execute("6Ld5QIoUAAAAAKznGOlK7z6mgqJ8ajRUc3CK5M17",{action:'general_form_demo_ajax_example_recaptcha_v3'}).then(function(b){document.querySelector(".g-recaptcha-response-v3-demo_ajax_example-recaptcha_v3").value=b;a&&a()})}window.customFormSubmit=new Event("customFormSubmit");let a=document.querySelector(".g-recaptcha-response-v3-demo_ajax_example-recaptcha_v3").closest("form");if(null!=a){let d=!0,b=0,c=document.getElementById("paymentFields_"+a.getAttribute("name"));a.onsubmit = function(f){f.preventDefault(); if (d) return b++,d = !1,a.CMS_CustomSubmit = new Event("CMS_CustomSubmit",{cancelable:!0}),e(function(){c?"true"===c.dataset.paymentEnabled?(a.dispatchEvent(window.customFormSubmit),b=0,d=!0):a.dispatchEvent(window.customFormSubmit):(a.CMS_CustomSubmit.data={form:a},a.dispatchEvent(a.CMS_CustomSubmit))}),!1;0<b&&b++;if(1<b)return alert("Form submission is in progress."),!1};c||a.addEventListener("CMS_CustomSubmit",function(c){c.defaultPrevented?(b=0,d=!0):a.submit()})}else e()}); </script> <input type="hidden" class="g-recaptcha-response-v3-demo_ajax_example-recaptcha_v3" name="g-recaptcha-response-v3"> <input class="button" type="submit" value="Submit"> </form> <div id="msgId"></div> <script> var myForm = document.getElementById("myFormId"); var message = document.getElementById("msgId"); myForm.addEventListener("CMS_CustomSubmit", function(event) { event.preventDefault(); //AJAX form submit below var action = myForm.action + "&jsonResponse=1"; fetch (action, { method: 'POST', body: new FormData(myForm) }).then(function (r) { return r.json(); }).then(function (response) { // do any validation or other custom stuff here console.log(response); if (response.Error && response.Error > 0) { message.classList.add("error"); message.innerHTML = response.ErrorMessages.join("\r\n"); } else { var msg = ""; for (var i=0;i<response.Fields.All.length;i++) { msg += response.Fields.All[i].Name + ': ' + response.Fields.All[i].Value + '<br>'; } myForm.style.display = 'none'; message.classList.remove("error"); message.classList.add("success"); message.innerHTML = '<h4>Success!</h4><p>' + msg + '</p>'; // If wanting to then redirect form, uncomment below: // window.location = response.FormRedirectLink; } }); }); </script>
{ "Name": "DEMO AJAX Example reCaptcha v3", "Alias": "demo_ajax_example-recaptcha_v3", "IsSubscription": false, "EnableDefaultJSValidation": false, "Fields": [ { "Name": "Email", "Alias": "Email", "CreatedDateTime": "2021-06-28T18:03:40.451619", "UpdateDateTime": "0001-01-01T00:00:00", "Type": 7, "IsMandatory": true, "FieldGroupType": 1, "Order": 2, "Options": [], "Id": "1415", "FormId": "1387" }, { "Name": "reCAPTCHA v3", "Alias": "ReCAPTCHAV3", "CreatedDateTime": "2021-06-28T18:03:40.45162", "UpdateDateTime": "0001-01-01T00:00:00", "Type": 9, "IsMandatory": false, "FieldGroupType": 1, "Order": 4, "Options": [], "Id": "1417", "FormId": "1387" }, { "Name": "First Name", "Alias": "FirstName", "CreatedDateTime": "2021-06-28T18:03:40.451617", "UpdateDateTime": "2022-05-11T15:32:06.413082", "Type": 7, "IsMandatory": true, "FieldGroupType": 1, "Order": 0, "Options": [], "Id": "1413", "FormId": "1387" }, { "Name": "Last Name", "Alias": "LastName", "CreatedDateTime": "2021-06-28T18:03:40.451618", "UpdateDateTime": "2022-05-11T15:32:06.413082", "Type": 7, "IsMandatory": true, "FieldGroupType": 1, "Order": 1, "Options": [], "Id": "1414", "FormId": "1387" }, { "Name": "Not Required", "Alias": "NotRequired", "CreatedDateTime": "2021-06-28T18:03:40.45162", "UpdateDateTime": "2022-05-11T15:32:06.413082", "Type": 7, "IsMandatory": false, "FieldGroupType": 2, "Order": 3, "Options": [], "Id": "1416", "FormId": "1387" } ], "PaymentAmount": 0.0, "ModuleItemId": 0, "FormType": "Generic", "ModuleName": "", "UniqueId": "1a0a0cf1-2e8d-4001-98ec-6dbaaa2cdbc3", "Parent": { "Value": { "Id": 2612, "ModuleLayoutName": "Page Detail", "Enabled": true, "ReleaseDate": "2018-11-24T18:00:00", "ExpiryDate": "2099-12-10T18:00:00", "Weighting": 0, "Item_Rating": 0, "CodeEditor": true, "ExternalId": 0, "DisableForSiteSearch": false, "Author_Name": null, "Author_Url": null, "Author": 0, "SEOTitle": null, "CustomProperties": "{}", "LastUpdatedDate": "2021-07-13T01:05:34.371572", "Module_Alias": "Page", "Module_Id": 1522, "ParentName": "demo-cs", "ParentUrl": "/demo-cs", "Name": "AJAX Form reCaptcha v3", "UrlSlug": "ajax-form-recaptcha-v3", "Url": "/demo-cs/ajax-form-recaptcha-v3", "MetaDescription": null, "ShowPageForSearchEngine": true, "CanonicalLink": null, "MetaTitle": null, "ParentId": 2224, "Url_List": [ "/demo-cs/ajax-form-recaptcha-v3" ], "ParentId_List": [ 2224 ], "EnableAMP": false, "AMPContent": null, "SocialMetaTags": null, "OpenGraphPropertiesValue": null, "SeoPriority": 0.5, "Description": "{% component type: \"form\", alias: \"demo_ajax_example-recaptcha_v3\", layout: \"\", collectionVariable: \"formData\" %}\r\n{% capture form %}{% component type: \"form\", alias: \"demo_ajax_example-recaptcha_v3\" %}{% endcapture %}\r\n\r\n<h1>Basic AJAX Form Submission Demo (with reCaptcha v3)</h1>\r\n<div class=\"grid-x grid-padding-x\">\r\n <div class=\"cell medium-6\">\r\n <p>{{form}}</p>\r\n </div>\r\n <div class=\"cell medium-6\">\r\n <ul class=\"tabs\" data-tabs id=\"code-tabs\">\r\n <li class=\"tabs-title is-active\"><a href=\"#panel1\" aria-selected=\"true\">Form Code</a></li>\r\n <li class=\"tabs-title\"><a data-tabs-target=\"panel2\" href=\"#panel2\">Liquid Output</a></li>\r\n </ul>\r\n <div class=\"tabs-content\" data-tabs-content=\"code-tabs\">\r\n <div class=\"tabs-panel is-active\" id=\"panel1\">\r\n <pre>{{form | escape}}</pre>\r\n </div>\r\n <div class=\"tabs-panel\" id=\"panel2\">\r\n <pre>{{formData | escape }}</pre>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", "TemplateName": "DEMO Companion Site", "ItemCategories": null, "ItemCategoryIdList": null, "ItemTags": null, "SiteSearchKeywords": null, "ID": 2612, "CreatedByMemberId": "0", "IsHome": false, "Pagination": null, "OpenGraphProperties": { "title": null, "type": null, "url": null, "locale": null, "image": null }, "Parent": null, "TemplateVirtualPointer": { "Pointer": 8491950041332711514, "TypeId": 1977186194, "InstanceId": 90, "DbTypeId": 1977186194, "DbInstanceId": 90 }, "Params": {} }, "Type": 5 }, "ReCaptcha_Sitekey": "6Ld5QIoUAAAAAKznGOlK7z6mgqJ8ajRUc3CK5M17", "Params": { "type": "form", "alias": "demo_ajax_example-recaptcha_v3", "layout": "", "collectionvariable": "formData" } }