Получение данных из представления 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")
}