Bay 05One script tag
#AJAX without writing JavaScript
Want the stay-on-the-page feel without writing the fetch yourself? Add our tiny helper script and a data-sendm8 attribute to your form. It sends the form in the background (file uploads included), disables the button while it’s sending, and shows a message when it’s done.
<script src="https://sendm8.com/s/v1.js" defer></script>
<form action="https://sendm8.com/f/k3x9q2m7ab" method="POST"
data-sendm8 data-sendm8-success="Thanks! We’ll be in touch.">
<label>Your email <input name="email" type="email" required></label>
<label>Message <textarea name="message" required></textarea></label>
<button>Send</button>
</form>- No JavaScript? Still works. The form posts the normal way and visitors land on your thank-you page, so nobody gets stuck.
data-sendm8-success: the message to show, or a selector like#thanksfor an element to reveal. The default is “Thanks! Message sent.” The form is cleared afterwards.data-sendm8-error: a selector for where errors go. Without it we add arole="alert"paragraph to the form. The text is the API’s own plain-English error, like “This form isn’t accepting submissions right now.”- Listen for
sendm8:success(event.detail.id) andsendm8:error(event.detail.message,code,status) on the form. Callevent.preventDefault()to skip the built-in message and do your own thing. - Opt a form out with
data-sendm8="off". For a manual send,window.sendm8.submit(form)returns a promise of{ ok, id, error }.
const form = document.querySelector("form[data-sendm8]");
form.addEventListener("sendm8:success", (event) => {
console.log("Stored as", event.detail.id);
});
form.addEventListener("sendm8:error", (event) => {
console.warn(event.detail.code, event.detail.message);
});