AJAX Возвращает ошибку, когда для Content-Type установлено значение json - PullRequest
0 голосов
/ 02 марта 2019

Я пишу простую библиотеку ajax для себя, и по какой-то причине я столкнулся с ошибкой.Вот пример кода, который возвращает {}

var Ajax = /** @class */ (function () {
    function Ajax() {
    }
    Ajax.send = function (params) {
        var xhttp = new XMLHttpRequest();
        params.error = params.error || function () { };
        params.callback = params.callback || function () {
            if (this.readyState == 4 && this.status == 200) {
                params.success(this);
            }
            else if (this.readyState == 4) {
                params.error(this);
            }
        };
        xhttp.onreadystatechange = params.callback;
        xhttp.open(params.method, params.url, params.async || true);
        for (var header in params.headers) {
            xhttp.setRequestHeader(header, params.headers[header]);
        }
        //xhttp.setRequestHeader("Content-type", "application/json; charset=utf-8");
        xhttp.send();
    };
    return Ajax;
}());
Ajax.send({
    method: "GET",
    url: "https://rectangular-nephew.glitch.me/",
    success: function (e) {
        document.write(e.responseText);
    },
    error: function (e) {
        document.write("Error: " + e.status);
    }
});

Все работает нормально, пока я не установлю тип контента на application/json:

var Ajax = /** @class */ (function () {
    function Ajax() {
    }
    Ajax.send = function (params) {
        var xhttp = new XMLHttpRequest();
        params.error = params.error || function () { };
        params.callback = params.callback || function () {
            if (this.readyState == 4 && this.status == 200) {
                params.success(this);
            }
            else if (this.readyState == 4) {
                params.error(this);
            }
        };
        xhttp.onreadystatechange = params.callback;
        xhttp.open(params.method, params.url, params.async || true);
        for (var header in params.headers) {
            xhttp.setRequestHeader(header, params.headers[header]);
        }
        
        ///Here it is
        xhttp.setRequestHeader("Content-type", "application/json; charset=utf-8");
        xhttp.send();
    };
    return Ajax;
}());
Ajax.send({
    method: "GET",
    url: "https://rectangular-nephew.glitch.me/",
    success: function (e) {
        document.write(e.responseText);
    },
    error: function (e) {
        document.write("Error: " + e.status);
    }
});

И я понятия не имею, почему это происходит.Я уже установил заголовки на своем сервере:

response.set("Access-Control-Allow-Origin", "*");
response.set("Access-Control-Allow-Methods", "*");
response.set("Access-Control-Allow-Headers", "*");

Но это тоже не работает.Так в чем может быть проблема?

Ошибка:

Доступ к XMLHttpRequest по адресу https://rectangular -nephew.glitch.me / 'origin' https://www.typescriptlang.org' был заблокирован политикой CORS: Ответ на запрос предварительной проверки не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».

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