Я пытаюсь выполнить запрос на странице с помощью AJAX. Бэкэнд использует Django. Мой javascript выглядит так:
$(function(){
$("#form").submit(function(event){
event.preventDefault();
var query = ($("#input-field").val());
$.ajax({
type: "GET",
url:"{% url 'search_building' %}",
data: {
'csrfmiddlewaretoken': '{{ csrf_token }}',
'q': query
},
success: function(data) {
$("#search-results").html(data);
}
});
});
});
Вся страница проходит и добавляет # search-results, где, поскольку я просто хочу, чтобы результаты были получены из таблицы.
Я также немного смущен тем, должен ли я использовать GET или POST с Ajax и должен ли я использовать токен csrf.
Очень признателен.
Я понял!
На моей исходной странице использовался один вид, один URL-адрес и шаблон, который возвращал все результаты запроса
Я хотел использовать язык шаблонов Django, поэтому мне не нужен вывод в json, а затем для написания javascript для обработки вывода.
Поэтому я создал второй шаблон для рендеринга только моих результатов, представление для обработки запроса, а затем использовал ajax для обработки отправки запроса в новое представление и отображения результатов нового шаблона в старый.
Попробуйте вернуть ответ из бэкэнд в формате json. Это позволит очень легко использовать данные ответа, и вы можете использовать его, как вам нравится.
Причина загрузки всей страницы заключается в том, что вы создаете шаблон с контекстом.
Для запроса ajax ответ в формате json предпочтительнее для обработки данных.
Кроме того, если вы хотите записать в базу данных, например новый экземпляр, что-то вроде этого, используйте запрос POST. Вместо этого все, что вам нужно, - это вызвать api для некоторого запроса или ситуаций, когда вы ожидаете, что api предоставит данные, вы можете использовать запрос GET.
Это моя версия того, что я узнал. Надеюсь, ты получил то, что попросил.
Im also a little confused about whether I should use a GET or POST with Ajax, and whether I should be using csrf token.
Все это будет зависеть от того, что требует конечная точка, которую вы вызываете.