Learn Magento 2 form Validation
https://www.thecoachsmb.com/a-complete-guide-on-magento-2-form-validation/
and
https://magecomp.com/blog/create-custom-form-in-magento-2-frontend/
Here is simple form example that make an ajax call
<?php
/** @var \Mageleap\Customform\Block\Index\Index $block */
?>
<div class="row"></div>
<form id="your-form-id" method="post" action="test.php" data-hasrequired="<?= $escaper->escapeHtmlAttr(__('* Required Fields')) ?>">
<div class="row">
<div class="col-md-6">
<div class="field city required">
<label class="label" for="city">
<span><?= /* @noEscape */ ('city') ?></span>
</label>
<div class="control">
<input type="text" name="city" title="<?= $escaper->escapeHtmlAttr(__('City')) ?>" class="input-text required-entry" id="city">
</div>
</div>
</div>
<div class="col-md-6">
<div class="field zip required">
<label class="label" for="zip">
<span>postcode</span>
</label>
<div class="control">
<input type="text" name="postcode" title="" class="input-text required-entry