IE 11 Ajax вызывает вызовы Ошибка 0x2efe или Аутентификация Creds не предоставлена - PullRequest
0 голосов
/ 08 ноября 2018

У меня очень простой вызов ajax PUT, который работает в Chrome и Firefox, но не работает в IE 11.

Сервер отправляет статус 403_FORBIDDEN для IE11 и 200_OK для chrome & firefox.

Я получаю одну из двух ошибок в инструментах разработки IE11 (f12):

SCRIPT7002: XMLHttpRequest: Network Error 0x2efe, Could not complete the operation due to error 00002efe.

или

база Error: responseText"{"detail":"Authentication credentials were not provided."}"

вот мой HTML:

{% csrf_token %}
<select name="1_score_risk" data-score="risk"
                            data-assesspk="1" data-answerpk="1"
                            class="select-post form-control center-block">
        <option selected value=0>0</option>
        <option value=1>1</option>
        <option value=2>2</option>
</select>

и мой csrf_token устанавливает javascript заголовка:

//this is directly from https://docs.djangoproject.com/en/dev/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;
}

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) {
            console.log(csrftoken); //csrf token shows up successfully every time
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});

Фактический AJAX-вызов на основе «при изменении» выбранного входа.

$(".select-post").on("change", function (e) {
    console.log($(this).val());
    var answerpk = $(this).data("answerpk");
    var score_type = $(this).data("score");
    var url = "{% url 'wsva:answer-list' %}" + answerpk + "/";
    var score_str = "score_" + score_type;
    var score = $(this).val();
    var payload = {};
    payload[score_str] = score;
    console.log('payload: ');
    console.log(JSON.stringify(payload));
    $.ajax({
        url: url,
        type: 'PUT',
        data: JSON.stringify(payload),
        dataType: 'json',
        contentType: "application/json; charset=utf-8",
        cache: false,
        xhrFields: {withCredentials: true},
        success: function (data) {
            console.log('put complete');
        },
        error: function (jqXHR, exception) {
            // Note: Often ie will give no error msg. Aren't they helpful?
            console.log('ERROR: jqXHR, exception', jqXHR, exception );
        }
    });
});

У меня django-cors-header установлен правильно с CORS_ORIGIN_ALLOW_ALL = True

Сначала я пытаюсь выполнить отладку на локальном хосте, но у меня ошибка даже в тестовой среде.

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