Получение данных из представления Django после запроса AJAX POST на javascript

Я использую Javascript для отправки асинхронного запроса в Django View. Представление может получить данные из POST-запроса, но я не могу вернуть сообщение, подтверждающее, что все сработало. Я ожидал, что xhttp.responseText будет содержать сообщение Thankyou, но оно пустое.

html-часть выглядит следующим образом:

<textarea id="message"></textarea>
<input type="submit" value="Send" id="send_button onclick="submit_message()"/>

Яваскрипт выглядит следующим образом:

function submit_message(){
    document.getElementById("send_button").value="Sent - Thankyou!";
    message = document.getElementById("message").value

    var xhttp = new XMLHttpRequest();

    xhttp.open("POST", "/send-message");
    xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhttp.send("csrfmiddlewaretoken={{ csrf_token }}&message="+message);

    console.log('Sent POST request')
    console.log(xhttp.responseText)
}

Я надеялся, что xhttp.responseText выведет Thankyou на консоль.

Функция Django View выглядит следующим образом:

def send_message(request):
    message = request.POST.get('message')
    print(message)
    return HttpResponse('Thankyou')

Переменная message печатается, как и ожидалось, но Thankyou, похоже, не возвращается.

Я делаю AJAX с JS в первый раз, так что я ожидаю, что я просто неправильно понял что-то простое.

Я могу только порекомендовать вам использовать JsonResponse вместо HttpResponse для подтверждения отправки. Ваша проблема, я предполагаю, в JS, вам нужно подтвердить ответ сервера, проверьте эту статью для лучшего понимания ajax запросов https://developer.mozilla.org/es/docs/Web/Guide/AJAX/Getting_Started#segundo_paso_.e2.80.93_procesando_la_respuesta_del_servidor

if (xhttp.readyState == 4) {
    // response received
    console.log(xhttp.responseText)
} else {
    // server not ready yet
    console.log("Server not ready")
}
Вернуться на верх