Причина, по которой функция fetchDataAndDisplay
не вызывается, заключается в том, что вы добавили прослушиватель событий щелчка к элементу с id , равным «btn-primary», но кнопка имеет класс"btn-primary".
// Change the "#btn-primary" to ".btn-primary"
$(".btn-primary").click(function() {
fetchDataAndDisplay();
});
Вы должны быть осторожны, поскольку все кнопки с классом "btn-primary" будут запускать это действие. Я бы посоветовал использовать идентификатор, относящийся к действию кнопки, например «gps-form-submit», для кнопки, а не для класса.
Также вы можете передать функцию fetchDataAndDisplay
непосредственно в качестве обратного вызова в прослушивателе событий щелчка, например $("#btn-primary").click(fetchDataAndDisplay)
.
Что касается того, что на самом деле будет обрабатывать ваш AJAX-вызов, вам потребуется создать отдельное представление, которое возвращает объект HttpResponse
из Django или объект Response
из Django Rest Framework .
Есть несколько других проблем с вашим кодом; эта часть вашей разметки не имеет смысла:
<div class="row">
<div class="col-sm-12">
<button type="submit" class="btn btn-primary">Submit selections</button>
</form>
</div>
</div>
Вы открыли два новых элемента div вокруг закрывающего тега формы без открывающего тега внутри его ближайшего родителя. Что-то вроде этого имело бы больше смысла:
<form>
<!-- rest of code -->
<div class="row">
<div class="col-sm-12">
<button type="submit" class="btn btn-primary">Submit selections</button>
</div>
</div>
</form>
Для этого раздела я бы рекомендовал изучить использование литералов шаблона :
str += '<div class="item-details">' +
'User Id is = ' + data[i].userId + '<br />' +
'Id is= ' + data[i].id + '<br />' +
'Title is = ' + data[i].title + '<br />' +
'</div>';
Это будет выглядеть примерно так:
str += `<div class="item-details">
User Id is = ${data[i]}<br />
Id is = ${data[i].id}<br />
Title is = ${data[i].title}<br />
</div>`
Это проще для чтения и избавляет от необходимости загружать конкатенацию строк.