(Ajax) Странность с кешированием в ИЕ

+
Дата: 05.09.2006 19:20:40
Есть скрипт для отправки почты с атачами.
Список вложений подгружается в фоне для текущего письма. Также можно удалять вложения с помощью Ajax.

У меня появилась какая-то странная проблема с процедурой обновления списка вложений (возможно кэширование браузером). Правда, не знаю.

// выполняет запрос к серверу
function request(url)
{
    r = false;
    
    try 
    {
        r = new XMLHttpRequest();
    }
    catch(trymicrosoft)
    {
        try
        {
            r = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (othermicrosoft)
        {
            try
            {
                r = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(failed)
            {
                r = false;
            }
        }
    }

    if (!r)
    {
        alert("Error initializing XMLHttpRequest! Your browser does not support XMLHttpRequest object.");
        window.close();
        return false;
    }
        
    r.open('GET', url, true);
    r.onreadystatechange = updateResponse;
    r.send(null);
}

// принимает ответ сервера
function updateResponse()
{
    var response = false;
    
    if (r.readyState==4)
    {
        if (r.status==200)
        {
            response = r.responseText;
        }
        else if (r.status == 404)
        {
            alert("Error: request URL does not exist");
        }
        else
        {
            alert("Error: status code is " + r.status);
        }
    }
    
    return response;
}

// формирует список вложений и обновляет контент
function getAttachesList()
{
    var n = new Date();
    
    var current_time = n.getTime();
        
    url = 'get_attaches.php?c='+current_time+'&id='+id;
    
    request(url);
    
    window.status = 'Loading...';
    
//    alert('foo');
    
    var list = updateResponse();

    if (list!='')
    {
        var str = '<table class="input" border=0 cellspacing="0" cellpadding="2" width="100%">';
    
        var rows = list.split(';');
    
        for(i=0; i<rows.length; i++)
        {
            str+= '<tr>';
        
            data = rows[i].split('|');
        
            str+= '<td width="1px">'+(i+1)+'.</td>';
            str+= '<td width="50%">'+data[1]+'</td>';
            str+= '<td width="30%" align="right">'+data[2]+'</td>';
            str+= '<td align="right"><a class="link" href="#" onClick="deleteAttach('+data[0]+')">delete</a></td></tr>';
        }
        str+= '</table>';
    
        document.getElementById('attachID').innerHTML = str;
    }
}

Проблема в том, что если раскомментировать строку alert('foo') в getAttachesList(), то список формируется как надо.
В противном случае область контента в таблице оказывается пустой. updateResponse() возвращает false.

Почему так?
Hratchia
Дата: 06.09.2006 10:07:34

1. не нашел откуда у тебя вызывается getAttachesList???
2. функция updateResponse делает return response - вопрос кому она
возращает? - ты ее используешь для обработки ответа сервера -
r.onreadystatechange = updateResponse;

3. функция getAttachesList - тут и твоя ошибка с алертом

......
request(url); - вызываем асинхронно скрипт на сервере без ожидания
ответа

window.status = 'Loading...';

// alert('foo'); - если раскоментить, то сервер успеет выслать нам данные

var list = updateResponse(); алерт закоменчен, ответ еще не пришел, а мы
пытаемся его получить
.......


поэтому заполнение document.getElementById('attachID').innerHTML =
str; надо
делать из функции ответа updateResponse



Posted via ActualForum NNTP Server 1.3

+
Дата: 06.09.2006 11:24:54
2 Hratchia

Спасибо!