Basic AJAX Form Submission Demo
NOTE: This script assumes jQuery is being loaded on your site.
<form id="myForm" action="/forms/cases.ashx?form=demo_ajax_example&jsonResponse=1" onsubmit="onMyFormSubmit(); return false;" method="post" enctype="multipart/form-data"> <label for="FirstName">First Name*</label> <input type="text" id="FirstName" name="FirstName"> <label for="LastName">Last Name*</label> <input type="text" id="LastName" name="LastName"> <label for="Email">Email*</label> <input type="text" id="Email" name="Email"> <label for="NotRequired">Not Required</label> <input type="text" id="NotRequired" name="NotRequired"> <label for="ReCAPTCHAV2">reCAPTCHA v2*</label> <div class="g-recaptcha" data-sitekey="6Lf2cGcUAAAAABbL4aDrclASNZx9S3uaI9EvpvlI"></div> <input class="button" type="submit" value="Submit"> </form> <div id="msgResponse"></div> <script> function onMyFormSubmit() { var $f = $('#myForm'); var $r = $('#msgResponse'); var gr = grecaptcha.getResponse(); if(gr.length == 0) { $r.css('color', 'red').html('reCaptcha not valid'); grecaptcha.reset(); } else { if($f.data("sent")) { $r.css('color', 'red').html("Form submission is already in process."); } else { $f.data("sent", true); $.ajax( { type: 'POST', dataType : "json", url: $f.attr('action'), data: $f.serialize(), success: function(msg) { var formResponse = msg; console.log(msg); if (formResponse.Error == 0) { var msg = ""; for(var i=0;i<formResponse.Fields.All.length;i++) { msg += formResponse.Fields.All[i].Name + ': ' + formResponse.Fields.All[i].Value + '<br>'; } $f.fadeOut(300); $r.css('color', 'green').fadeIn(500).html('<h4>Thank you!</h4><p>' + msg + '</p>'); } else { var msg = ""; for(var i=0;i<formResponse.ErrorMessages.length;i++) { msg += formResponse.ErrorMessages[i] + "<br>"; } $r.css('color', 'red').fadeIn(500).html(msg); grecaptcha.reset(); $f.data("sent", false); } }, error: function(msg) { $r.css('color', 'red').fadeIn(500).html('error'+msg); $f.data("sent", false); return false; } }); } } } </script>
{ "Name": "DEMO AJAX Example", "Alias": "demo_ajax_example", "IsSubscription": false, "EnableDefaultJSValidation": false, "Fields": [ { "Name": "Email", "Alias": "Email", "CreatedDateTime": "2021-06-28T18:03:40.451603", "UpdateDateTime": "0001-01-01T00:00:00", "Type": 7, "IsMandatory": true, "FieldGroupType": 1, "Order": 2, "Options": [], "Id": "1396", "FormId": "1383" }, { "Name": "reCAPTCHA v2", "Alias": "ReCAPTCHAV2", "CreatedDateTime": "2021-06-28T18:03:40.45161", "UpdateDateTime": "0001-01-01T00:00:00", "Type": 9, "IsMandatory": true, "FieldGroupType": 2, "Order": 4, "Options": [], "Id": "1404", "FormId": "1383" }, { "Name": "First Name", "Alias": "FirstName", "CreatedDateTime": "2021-06-28T18:03:40.451602", "UpdateDateTime": "2022-05-11T15:32:06.413082", "Type": 7, "IsMandatory": false, "FieldGroupType": 1, "Order": 0, "Options": [], "Id": "1394", "FormId": "1383" }, { "Name": "Last Name", "Alias": "LastName", "CreatedDateTime": "2021-06-28T18:03:40.451602", "UpdateDateTime": "2022-05-11T15:32:06.413082", "Type": 7, "IsMandatory": false, "FieldGroupType": 1, "Order": 1, "Options": [], "Id": "1395", "FormId": "1383" }, { "Name": "Not Required", "Alias": "NotRequired", "CreatedDateTime": "2021-06-28T18:03:40.451604", "UpdateDateTime": "2022-05-11T15:32:06.413082", "Type": 7, "IsMandatory": false, "FieldGroupType": 2, "Order": 3, "Options": [], "Id": "1397", "FormId": "1383" } ], "PaymentAmount": 0.0, "ModuleItemId": 0, "FormType": "Generic", "ModuleName": "", "UniqueId": "2417998c-a671-44da-9403-c9972c7e0ac8", "Parent": { "Value": { "Id": 2227, "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:06:04.346349", "Module_Alias": "Page", "Module_Id": 1522, "ParentName": "demo-cs", "ParentUrl": "/demo-cs", "Name": "AJAX Form", "UrlSlug": "ajax-form", "Url": "/demo-cs/ajax-form", "MetaDescription": null, "ShowPageForSearchEngine": true, "CanonicalLink": null, "MetaTitle": null, "ParentId": 2224, "Url_List": [ "/demo-cs/ajax-form" ], "ParentId_List": [ 2224 ], "EnableAMP": false, "AMPContent": null, "SocialMetaTags": null, "OpenGraphPropertiesValue": null, "SeoPriority": 0.5, "Description": "{% component type: \"form\", alias: \"demo_ajax_example\", layout: \"\", collectionVariable: \"formData\" %}\r\n{% capture form %}{% component type: \"form\", alias: \"demo_ajax_example\" %}{% endcapture %}\r\n\r\n<h1>Basic AJAX Form Submission Demo</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 <p class=\"callout warning\">NOTE: This script assumes jQuery is being loaded on your site.</p>\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": 2227, "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": "6Lf2cGcUAAAAABbL4aDrclASNZx9S3uaI9EvpvlI", "Params": { "type": "form", "alias": "demo_ajax_example", "layout": "", "collectionvariable": "formData" } }