Я разработал свое приложение для Linux, и запросы AJAX работают нормально. Я вытащил приложение на компьютер с Windows, но запросы AJAX терпят неудачу, я просто получил 403 Forbidden ошибку. От поиска в Интернете я думаю, что это проблема с токеном csrf. В Linux я вижу csrftoken:"AjQzJy3tRZ2awslgdibkDTvQgANFQKmP"
в разделе «Cookies» запросов AJAX. Я не вижу cookies в Windows.Django - AJAX не работает из-за того, что токен csrf не работает на окнах
Это код Javascript, который я использую для получения файла cookie csrf. Именно из https://docs.djangoproject.com/en/1.8/ref/csrf/
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
Это где я подать запрос AJAX:
function refreshInformation(){
$.ajax({
type: "POST",
url: "get_flows_info",
data: {
csrfmiddlewaretoken: getCookie('csrftoken')
}
dataType : "json",
async : true,
error : function(data){
alert('AJAX error:' + data);
},
success : function(json_data){
// do stuff...
},
});
}
Это мнение испрашивается:
def get_flows_info(request):
if request.is_ajax():
# do stuff...
return HttpResponse(json.dumps(ret), content_type='application/json')
Я нашел это: Django CSRF check failing with an Ajax POST request но JQuery не имеет никакого значения.
Любая помощь?
Спасибо.
Вы пытались отправить заголовок 'X-CSRFToken'? –
Кроме того, что возвращает 'getCookie ('csrftoken') вызов? Я предполагаю, что ['CSRF_COOKIE_NAME'] (https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-CSRF_COOKIE_NAME) имеет значение по умолчанию. –
В Linux он возвращает 'AjQzJy3tRZ2awslgdibkDTvQgANFQKmP', в Windows он возвращает null ... – BelegNeurion