Я пытаюсь просто заполнить текстовое поле соответствующим значением базы данных, используя 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






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'),
Почему именно вам нужно, чтобы это был JSON? Это просто строка.