Не отправляет запрос Ajax в Django
Не отправляется запрос ajax в функцию django - в консоли выводит ошибку: 500.
Это во вьюхе:
@csrf_exempt
def resource_create_multiblank(request):
print('ok')
return HttpResponse('update')
url:
path('<slug:slug>/create/multiblank/', views.resource_create_multiblank, name='resource-create-multiblank'),
JS:
function generateBlank(slug) {
if (localStorage['persons'] != "[]" && localStorage['persons'] != undefined) {
console.log(localStorage['persons']);
console.log(slug);
$.ajax({
url: "create/multiblank/",
type: "POST",
data: {
'persons': localStorage['persons'],
'service': slug,
},
success: function (data) {
console.log('OK');
},
error: function (data) {
console.log('Error Server');
},
dataType: "json",
});
};
};
в Шаблоне:
<a herf="#" name="{{ slug }}" class="btn btn-sm btn-outline-secondary" onclick="generateBlank(name);"></a>
Подскажите пожалуйста, в чем может быть проблема?
Есть предположение, что ошибка банальна: не передается параметр slug в адрес. Если так - как мне правильно ее передать?
пробовал так:
JS:
url: "{% url 'resource-create-multiblank' "+slug+" %}",
и так:
url: "/"+slug+"/create/multiblank/",
В этом случае выдавала 404 ошибку.
Для того, чтобы работал POST Ajax выше прописал:
function getCookie(name) {
let cookieValue = null;
if (document.cookie && document.cookie !== '') {
const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i].trim();
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
};
const csrftoken = getCookie('csrftoken');
function csrfSafeMethod(method) {
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function (xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
Ответы (1 шт):
Автор решения: Conor McGregor
→ Ссылка
Немного разобравшись в коде, получил следующий результат:
В шаблоне:
<a name="{% url 'resource-create-multiblank' slug %}" class="btn btn-sm btn-outline-secondary" onclick="generateBlank(name);"></a>
В JS:
function generateBlank(url) {
if (localStorage['persons'] != "[]" && localStorage['persons'] != undefined) {
$.ajax({
url: url,
type: "POST",
data: {
'persons': localStorage['persons'],
},
success: function (data) {
console.log('OK');
},
error: function (data) {
console.log('Error Server');
},
dataType: "json",
});
};
};
view:
@csrf_exempt
def resource_create_multiblank(request, slug):
....
return JsonResponse(msg, safe=False)