Использование AJAX для запуска функции django из JS

#javascript #django

#javascript #django

Вопрос:

У меня есть кнопка html. когда я нажимаю ее, я хочу запустить функцию JS, которая вызовет функцию django. Веб-сайт загружается, но когда я нажимаю кнопку, ничего не происходит. кто-нибудь может увидеть, где я ошибаюсь?

HTML:

 <input type='button' value='run function' onclick='runScript()'>
 

URLs.py:

 path('printing_function/', views.printing_function, name='printing_function')
 

views.py:

 def printing_function(request):
    print("hello")
    return HttpResponse()
 

Main.js:

 function runScript() {
    $.ajax({
        url: 'print_function/',
        success: function(data) {
        }

    });
}
 

Комментарии:

1. Для этого может потребоваться больше деталей отладки. Каков ответ на ваш запрос ajax?

2. В вашем urls.py , URL printing_function/ -адрес, тогда как в вашей функции ajax URL- print_function/ адрес. URL-адреса не совпадают . Кроме того, в ваших HTML-шаблонах начинайте URL-адреса с косой черты ( / ), иначе у вас возникнут неожиданные проблемы. Подробнее читайте об относительных и абсолютных путях.

Ответ №1:

Обычно я использую что-то вроде этого :

 function runScript() {
    // Add a log just to see if the function works
    console.log('button clicked!')
    $.get("{% url 'printing_function' %}")
        .done(function(response) {
            console.log(response)
        )
        .fail(function(error) {
            console.log(error)
        )
}
 

Обратите внимание, что это {% url ... %} можно использовать, только если вы находитесь в шаблоне HTML. Если вы изолировали свой JS в другом файле, вам необходимо заменить его точным URL: /printing_function/ (как указано @xyres)

И, на мой взгляд, я предпочитаю возвращать JsonResponse :

 def printing_function(request):
    print("hello")
    return JsonResponse({'success': True})