singlepost

проблемы с XMLHttpRequest под IE 6… << На главную или назад  

Как формируется запрос:
function getRequest(){
http_request = false;

if (window.XMLHttpRequest) { // Mozilla, Safari,…
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
return http_request;
}

Как применяется:
http_request = false;
http_request = getRequest();

http_request.open('POST', './php/next.php', true);
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded, charset=utf-8');
http_request.onreadystatechange = function() {
if (this.readyState == 4) {
if(this.status == 200) {
document.getElementById('workDiv').innerHTML = this.responseText;

}
}
};

if (currentQuestionName == 'intro')
params = '';

http_request.send(params);

PHP обработчик:
if ($_SESSION['user_position'] == 'intro'){
$question_contents = file_get_contents('../qst/S2.php');
echo iconv("cp1251", "UTF-8", $question_contents);
$_SESSION['user_position'] = 'S2';
exit;
}

Переменная js currentQuestionName имеет тоже значение, что и $_SESSION['user_position']… -проверено… в Opera, Mozilla и IE7+ подобный код работает на ура… в IE6- либо выдает '<br />', либо вообще ничего не возвращает в this.responseText;

откуда у меня растут руки? что не так? плиз, хэлп, горю…..

4 ответов в теме “проблемы с XMLHttpRequest под IE 6…”

  1. 3
    Дмитрий Молостов ответил:

    > пусть привыкают к хорошим бразуерам
    Согласен

  2. 2
    Константин Башинский ответил:

    всем спасибо за внимание… разобрался… посылалось и принималось два запроса за один "такт" и IE6 путался, что обрабатывать… к тому же не работал без отдельной конструкции функции специально для него – "особенного":

    http_request.onreadystatechange = function() {
    if (window.ActiveXObject){ // для убобища IE
    assa(http_request);
    return 0;
    }
    if (this.readyState == 4) { // для всех других браузеров
    if(this.status == 200) {
    document.getElementById('workDiv').innerHTML = this.responseText;
    }
    }
    };

    function assa(http_request){
    if (http_request.readyState == 4) {
    if(http_request.status == 200) {
    document.getElementById('workDiv').innerHTML = http_request.responseText;
    }
    }
    }

    правда, пользователям придётся забыть про встроенный в систему "дебаггер"… )))) пусть привыкают к хорошим бразуерам… )))

  3. 1
    Константин Башинский ответил:

    доп инфо: синхронный запрос работает на ура… не работает асинхронный… что такое?

    ещё доп инфо: проверил дебаг тулзой – пхп возвращает нужные значения, всё как надо… что-то не проходит здесь:
    function() {
    if (this.readyState == 4) {
    if(this.status == 200) {
    document.getElementById('workDiv').innerHTML = this.responseText;
    }
    }
    };

    только в IE6, а нужно позарез… товарищи, колитесь, что это может быть?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.