Запрос Django не передается в AJAX в формате JSON

Я пытаюсь просто заполнить текстовое поле соответствующим значением базы данных, используя Django и AJAX. Цель состоит в том, чтобы при изменении значения раскрывающегося списка текстовое поле автоматически обновлялось. Я получаю следующую ошибку в консоли:

SyntaxError: Unexpected token < in JSON at position 3 & Uncaught ReferenceError: data is not defined

Я пытался сделать это без JSON, но тогда данные оказались целым html-кодом текущей загруженной страницы.

tasks.html

<form method = "POST" id = "function" function-url = "{% url 'synctool:load_function' %}" novalidate>
    {% csrf_token %}
    {{ form.as_p }}
    <button type = "submit">Execute</button>
</form>

<script src = "http://code.jquery.com/jquery-3.4.1.min.js" integrity = "sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo = " crossorigin = "anonymous"></script>
<script>
    $("#id_function_name").change(
                            function () 
                                {
                                    var url = $("#function").attr("function-url");
                                    var function_id = $(this).val(); 
                                    console.info(function_id)

                                    $.ajax(
                                    {
                                        url: url,
                                        dataType: "json",
                                        data: 
                                        {
                                            'function_name': function_id
                                        },
                                        success: function (data)
                                        {   
                                            console.info('success')

                                            $("#id_script_location").val(data);
                                        },
                                        error: function(jqXHR, textStatus, errorThrown) 
                                        {
                                        console.info('jqXHR:');
                                        console.info(jqXHR);
                                        console.info('textStatus:');
                                        console.info(textStatus);
                                        console.info('errorThrown:');
                                        console.info(errorThrown);
                                        }
                                    });
                                    console.info("ajax executed")

                                });
</script>

urls.py

url(r'^$', views.load_script, name='load_function'),

просмотры.py

def load_script(request):

    function_id = request.GET.get('function_name')
    query = serialize('json', Task.objects.filter(function_name_id = function_id).values(), cls=LazyEncoder)

    return query

Почему именно вам нужно, чтобы это был JSON? Это просто строка.

Higor Rossato 16.07.2019 16:50
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
48
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

просмотры.py

import json 

        def load_script(request):
            if request.method == 'POST':
                response_json = request.POST
                response_json = json.dumps(response_json)
                data = json.loads(response_json)
                query = data['function_name']
                data  = {'query': query}
                return JsonResponse(data, safe=False)

и в джс

    var patch = {'function_name': function_id}

      $.ajax(
                                        {
                                            url: url,
                                            dataType: "json",
                                            data: 
                                             patch,
                                            success: function (data)
                                            {   
                                                console.info('success')

                                                $("#id_script_location").val(data);
                                            },
                                            error: function(jqXHR, textStatus, errorThrown) 
                                            {
                                            console.info('jqXHR:');
                                            console.info(jqXHR);
                                            console.info('textStatus:');
                                            console.info(textStatus);
                                            console.info('errorThrown:');
                                            console.info(errorThrown);
                                            }
                                        });
                                        console.info("ajax executed")

                                    });
Ответ принят как подходящий

Очевидно, что наборы запросов Django и JSON на самом деле не совпадают. Я смог найти решение сам. Окончательный код:

просмотры.py

# Dynamic Load/Ajax
def load_script(request):

    function_id = request.GET.get('function_name')
    query = Task.objects.filter(function_name_id = function_id).values_list('script_location', flat=True).first()

    return HttpResponse(query)

tasks.html

<!-- JQuery Ajax script -->
<script src = "http://code.jquery.com/jquery-3.4.1.min.js" integrity = "sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo = " crossorigin = "anonymous"></script>
<script>
$("#id_function_name").change(
                            function () 
                                {
                                    var url = $("#function").attr("function-url");
                                    var function_id = $(this).val(); 

                                    $.ajax(
                                    {
                                        url: url,
                                        data: { 'function_name': function_id },
                                        success: function (data)
                                        {   
                                            console.info('ajax load success')

                                            $("#id_script_location").val(data);
                                        },
                                        error: function() 
                                        {
                                        console.info('ajax load error');

                                        }
                                    });                                                                  
                                });
</script>

urls.py

url(r'^load_function/$', views.load_script, name='load_function'),

Другие вопросы по теме