Можно ли отличить сетевые ошибки от перекрестных ошибок? - PullRequest
0 голосов
/ 19 мая 2010

http://www.w3.org/TR/access-control/

При чтении спецификации CORS, связанной выше, кажется, что невозможно провести надежное различие между общей «сетевой ошибкой» и ошибкой отказа в доступе из разных источников. Из спецификации:

При возникновении сетевой ошибки. Применить шаги по сетевой ошибке.

Выполните проверку совместного использования ресурсов. Если возвращается ошибка, примените шаги с ошибкой в ​​сети.

http://www.w3.org/TR/access-control/#simple-cross-origin-request0

В моем тестировании я не смог найти какие-либо особенности реализации Firefox, которые, кажется, указывают на то, что проверка совместного использования ресурсов определенно не удалась. Он просто переключает readyState на 4 и устанавливает статус на 0.

В конечном счете, мне бы хотелось, чтобы в мою функцию передавалась функция обратного вызова успешного завершения, общий обратный вызов сбоя и необязательный обратный вызов отказа от источника. Спасибо за любую помощь или понимание.

1 Ответ

0 голосов
/ 19 мая 2010

Скорее всего, вам не нужно отправлять запрос XHR, чтобы узнать, когда произойдет ошибка перекрестного источника. Попробуйте следующее на основе jQuery's $.get:

var xhr = {
    get: function(url, data, callback, dataType) {
        if ( !this.isSameOrigin(url) ) {
            callback(null, "Same-origin error or whatever", null);
        }

        $.get(url, data, callback, dataType);
    },

    isSameOrigin: function(url) {
        // Do a string comparison against window.location.  Get as complicated 
        // as you'd like
        return !!(
            // Url doesn't contain a valid protocol (relative to domain))
            !url.match(/^https?:\/\//i) || 
            // Url contains a protocol but the request is to the current domain
            url.match(new RegExp("^https?://" + window.location.host, "i"))
        );
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...