проблема с использованием HTML5 для совместного использования ресурсов из разных источников - PullRequest
2 голосов
/ 09 августа 2010

Я новичок в этом сайте и успешно использую общий доступ к ресурсам HTML5 (CORS) для отправки данных на мой сервер. Я только недавно пытался включить GET в это, так как мы пытаемся, чтобы все наши сообщения не зависели от библиотеки JavaScript. При этом я столкнулся со странной проблемой, которая кажется несколько исправляемой для Firefox, но все еще ведет себя неправильно во всех браузерах WebKit. По сути, все, что возвращает статус <200 или> 300, просто приходит как статус 0. Это делает почти невозможным выполнение обработки ошибок.

Для Firefox я могу поместить произвольную строку в конец запроса, чтобы предотвратить его кэширование; тем самым фиксируя 304 как минимум. Это, однако, не работает для меня в Chrome / Safari. Вот пример моего кода:

xhr_request: function(type,url, data, callbacks, form){
    var form = (typeof(form)!=="undefined")?form:null;
    var xhr = new XMLHttpRequest();
    var response;
    data = com.ticommunity.obj_to_string(data);
    xhr.open(type, url, true);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.setRequestHeader("X-TxId", com.ticommunity.keyGen());
    xhr.withCredentials = true;
    xhr.send(data);
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4){
            if(xhr.status == 200){
                response = xhr.responseText;
                com.ticommunity.comm.request_callback(response, callbacks, form);
            }else{`//****this is where the 0 Status keeps coming up***`
                response = xhr.status;
                com.ticommunity.comm.request_callback(response, callbacks, form);
            }
        }
    }
}

Кто-нибудь еще сталкивался с чем-то подобным и придумывал обходной путь? Я просто делаю что-то глупое с моей стороны? Любая помощь с благодарностью.

РЕДАКТИРОВАТЬ: я понял, 0, это то, что должно произойти в соответствии со спецификацией, но мне действительно нужно иметь возможность ловить в этих ситуациях и делать некоторые другие обработки.

1 Ответ

0 голосов
/ 21 января 2011

Я не видел эту проблему специально, но мне интересно, повезло бы вам, если бы вы использовали другое событие xhr, например xhr.onload.Вы можете доверять onload для запуска успешных ответов, поэтому нет необходимости проверять xhr.status.Вот полный список событий, если вам нужно поймать что-то еще:

http://www.w3.org/TR/XMLHttpRequest2/#events

...