Django JQuery AJAX 403 ошибка - PullRequest
       2

Django JQuery AJAX 403 ошибка

8 голосов
/ 04 октября 2011

Я пытаюсь заставить работать ajax, но получаю ошибку 403.Я совершенно новичок в jquery.

Вот мой код

    $('#prod_search_button').click(function(){
    if ($('#inv_prod_list').length) {
        //insert a new record
    }
    else
    {
        //create the #inv_prod_list table and insert first record
        var inv_table= '<table id="inv_prod_list" style="border: 2px solid #dddddd;"></table>';

        // create query object
        var prod_query = {
            query: jQuery.trim($('#id_prod_query').val())
        };

        // convert object to JSON data
        var jsonQuery = JSON.stringify(prod_query);

        $.ajax({
            type: 'POST',
            url: '/company/product/item_search.json/',
            data: jsonQuery,

             success: function(jsonData){
                    var parsed = JSON.parse(jsonData);
                    $('#inv_prod_wrap').html(inv_table);

                    var new_record = 'this is html for new row'

                    $('#inv_prod_list tr:last').after(new_record);



                    //off rows alt color
                   }
        });
    }
});

Ответы [ 6 ]

20 голосов
/ 04 октября 2011
2 голосов
/ 02 августа 2016

просто скопируйте этот фрагмент кода из официальных документов в файл js и включите его в свой HTML

// using jQuery
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;
}
var csrftoken = getCookie('csrftoken');
function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});
1 голос
/ 01 октября 2015

Вы можете избежать CSRF, добавив следующую аннотацию перед определением вашего метода.

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def Method():
0 голосов
/ 07 февраля 2016

Также можно проверить, включено ли промежуточное ПО csrf в settings.py и отключить его.Ищите 'django.middleware.csrf.CsrfViewMiddleware'.

0 голосов
/ 16 января 2015

Я столкнулся с этим и решил опубликовать, что происходит. У меня был {% CSRF_TOKEN %} в кэшированном пейджинге, и он кэшировал то, что он там поместил. Таким образом, для некоторых пользователей это было допустимо, а для некоторых - не зависело от кеша! Это был кошмар, чтобы отследить, хотя это должно было быть очевидно ... Так что проверь свое кеширование.

0 голосов
/ 04 октября 2011

См. определения кода статуса HTTP / 1.1 .«403» - это код состояния «Запрещено».Эта ошибка возникает на стороне сервера вашего $.ajax запроса, а не на стороне клиента (т. Е. Ваш код выполняет запрос, но ответ от сервера - это сообщение об ошибке).

Документуказывает, что серверы должны отвечать этой ошибкой только в определенных ситуациях:

Сервер понял запрос, но отказывается его выполнить.Авторизация не поможет и запрос НЕ ДОЛЖЕН повторяться.Если метод запроса не был HEAD и сервер желает сообщить, почему запрос не был выполнен, он ДОЛЖЕН описать причину отказа в объекте.Если сервер не желает предоставлять эту информацию клиенту, вместо него можно использовать код состояния 404 (не найден).

Как правило, ошибка такого рода означает, что любой пользователь, вошедший в систему как пользователь, не имеет доступа к запрашиваемому URL-адресу.Часто это указывает на то, что единственной ошибкой в ​​вашем коде является URL-адрес, на который вы делаете запрос, или порядок последовательности вызовов (например, вы пытаетесь запросить данные перед входом в систему).Реже некоторые веб-серверы и веб-приложения настраиваются так, чтобы они отвечали 403 кодами ошибок вместо 404 (не найденных) кодов ошибок для всех «недействительных» запросов, чтобы избежать утечки информации о том, какие файлы существуют / не существуют на сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...