Hi,
I’m trying to submit my custom form with Fetch API (not $.ajax), and for some reason it’s not working. If I’m submitting the same form with $.ajax the data is sent and a success callback is triggered, but when I’m trying to do the same with native Fetch API I’m getting an error and the data isn’t sent.
Here’s jQuery code:
let status = document.getElementById("my-form-status"); jQuery('body').on('click', '#contactus-form .btn.btn-default', function(e){ e.preventDefault(); e.stopImmediatePropagation(); jQuery.ajax({ type: 'post', url: '/customcontact/index/submit', data: jQuery('#contactus-form').serialize(), cache: false, showLoader: 'true', success: function(response) { console.log(response.success); status.innerHTML = "Thanks for your submission!"; } }); return false; });
Fetch request:
const form = document.querySelector("#contactus-form"); form.addEventListener("submit", (event) => { event.preventDefault(); const body = new FormData(form); const response = fetch('/customcontact/index/submit', { method: 'POST', body }) .then(response => response.json()) .then(data => console.log(data)) .catch(err => console.log(err)); });
When I’m submitting it with Fetch API I’m getting this error:
`SyntaxError: Unexpected token '<', "<!doctype "... is not valid JSON`
The response in my controller is:
$jsonResponse = $this->resultFactory->create(ResultFactory::TYPE_JSON); $jsonResponse->setData([ 'name' => 'name' ]); return $jsonResponse;
Solved! Go to Solution.
Figured it out. The problem is `form_key` isn’t added to the FormData.
Appending it solves the issue:
body.append('form_key', document.querySelector('input[name="form_key"]').value);