# HTML
<form method="POST" id="example-form" action="/form-submit-url/">
{% csrf_token %}
<textarea name="content"></textarea>
<button type="submit">Save</button>
</form>
# JS
function handleFormOnSubmit(event){
event.preventDefault()
const myForm = event.target
const myFormData = new FormData(myForm)
const url = myForm.getAttribute("action")
const method = myForm.getAttribute("method")
const xhr = new XMLHttpRequest()
xhr.open(method, url)
xhr.setRequestHeader("HTTP_X_REQUESTED_WITH", "XMLHttpRequest")
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest")
xhr.onload = function(){
const serverResponse = xhr.response
console.log(serverResponse)
}
xhr.send(myFormData)
}
const formEl = document.getElementById("example-form")
formEl.addEventListener("submit", handleFormOnSubmit)
# URLS.PY
path("form-submit-url/", form_view),
# VIEWS.PY
def form_view(request, *args, **kwargs):
form = forms.Form(request.POST or None)
if form.is_valid():
obj = form.save(commit=False)
obj.save()
if request.is_ajax():
return JsonResponse(obj.serialize(), status=200)