What's wrong with a traditional ? Form submission changes/reloads the page, and it's not trivial to properly prevent this. You can't send custom headers with a submitted form. You can't (easily) parse the server response after a form is submitted. Programmatically tracking invalid forms/fields is frustrating. You can't send form data as JSON. You have no opportunity to programmatically augment user-entered data before it is sent to the server. Custom form elements (such as those created using the web components spec) cannot be submitted using a traditional unadulterated . The ajax-form custom element augments a traditional to provide additional features and solve the problems listed above. See the API documentation page for complete documentation and demos.