Автор Тема: XMLHttpRequest  (Прочитано 5992 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Anthony

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
XMLHttpRequest
« : 27 Июня 2006, 23:02:42 »
День добрый!

Совершенно неожиданно наступил на такие грабли: на сайте есть табличка с данными, которые обновлются посредством XMLHttpRequest, когда пользователь нажимает на кнопочку. Через некоторое время ИЕ вылетает с системной ошибкой. В Firefox все работает стабильно.

Кто-нибудь сталкивался с подобной проблемой? Ниже привожу код скрипта:


function get_http(){
    var 
xmlhttp;

    if (
window.XMLHttpRequest)
	
{
	
	
try { 
xmlhttp = new XMLHttpRequest(); }
	
	
catch (
e) {
	
xmlhttp false; }
    }
	
else if (
window.ActiveXObject)
	
{
	
	
try { 
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
	
	
catch (
e) {
	
xmlhttp false; }
    }
    return 
xmlhttp;
}

function 
ch_tbl_section()
{
	
if(!
this.http)
	
{
	
	
this.http get_http();
	
	
this.working false;
	
}

	
if (!
this.working && this.http)
	
{
	
	
var 
http this.http;
	
	

	
	
url = .....;

	
	
this.http.open("GET"urltrue);
	
	
this.http.onreadystatechange = function()
	
	
{
	
	
	
if (
http.readyState == 4)
	
	
	
{
	
	
	
	
...
	
	
	
}
	
	
}
	
	
this.http.send(null);
	
}
	
if(!
this.httpalert(\'Ошибка XMLHTTP!\');
}

Оффлайн vasa_c

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 157
  • +0/-0
  • 0
    • Просмотр профиля
    • http://blgo.ru/blog/
XMLHttpRequest
« Ответ #1 : 28 Июня 2006, 12:03:35 »
Что за ошибка?
В каком контексте выполняются эти функции?
Блог ГО

Оффлайн Anthony

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
XMLHttpRequest
« Ответ #2 : 28 Июня 2006, 12:16:47 »
Ошибка системная "Приносим свои извинения, приложение будет закрыто. Отправить отчет?" точный текст не помню.

Контекст. Ну я в принципе написал в самом начале. Пользователь жмет на кнопку "Обновить", вызывается функция ch_tbl_section(), которая посылает запрос на сервер. С сервера возвращается строка с данными, которая потом парсится, согдается табличка и после этого уже на страничке старая заменяется новой.

Ошибка вылезает только в ИЕ после нескольких обновлений.

Оффлайн vasa_c

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 157
  • +0/-0
  • 0
    • Просмотр профиля
    • http://blgo.ru/blog/
XMLHttpRequest
« Ответ #3 : 28 Июня 2006, 12:22:04 »
Т.е. ch_tbl_section() не как метод объекта вызывается? Зачем тогда this?
Блог ГО

Оффлайн Anthony

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
XMLHttpRequest
« Ответ #4 : 28 Июня 2006, 12:32:58 »
Честно говоря понятия не имею ;) Код писал не я, а разбираться приходится.

У меня тоже сначала возник подобный вопрос, думаю это один из вариантов работы с глобальными переменными без их объявления вне функции.

Оффлайн vasa_c

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 157
  • +0/-0
  • 0
    • Просмотр профиля
    • http://blgo.ru/blog/
XMLHttpRequest
« Ответ #5 : 28 Июня 2006, 12:43:45 »
Кривой вариант.
Разберись все-таки на что this указывает и как все вызывается.
В IE насколько я знаю он указывает не всегда на то, на что должен по документации указывать. Возможно из-за этого ошибка.
Так же посмотри на изменение свободной памяти в системе после каждого обновления в IE (если слетает не после первого).

Как на кнопку "обновить" обработчик вешается?
Первые обновления в IE (до сбоя) нормально работают?
« Последнее редактирование: 28 Июня 2006, 12:52:21 от vasa_c »
Блог ГО

Оффлайн Anthony

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
XMLHttpRequest
« Ответ #6 : 28 Июня 2006, 12:50:54 »
Попробую.

На что this указывает... даже и не знаю, в принципе я привел практически весь код скрипта, только парсер выкинул. Попробую переделать на глобальные переменные.

Оффлайн vasa_c

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 157
  • +0/-0
  • 0
    • Просмотр профиля
    • http://blgo.ru/blog/
XMLHttpRequest
« Ответ #7 : 28 Июня 2006, 12:54:50 »
В обработчике onreadystatechange this не используется?
Блог ГО

Оффлайн Anthony

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
XMLHttpRequest
« Ответ #8 : 28 Июня 2006, 12:59:54 »
Я только одно событие обрабатываю - onclick

Оффлайн Anthony

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
XMLHttpRequest
« Ответ #9 : 28 Июня 2006, 13:03:38 »
А, понял. Нет, не используется. Ну разве что в конце стоит this.working = false;


        this
.http.onreadystatechange = function()
        {
            if (
http.readyState == 4)
            {
                ...
                
this.working false;
            }
        }

Оффлайн Anthony

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
XMLHttpRequest
« Ответ #10 : 28 Июня 2006, 13:53:33 »
Так, переделал на глобальные переменные. И в самое начало добавил xmlworking = true;.

Виснуть вроде перестало. Но вылез совсем странный глюк - после очередного обновления по всему экрану псевдографика вылезла. Такое ощущение, что в обработчике глюк, хотя там ломаться-то нечему. removeChild(tbl_body) - удаляем старые данные, дальше серией createElement() создаем новую таблицу и в конце appendChild(tbl_body) добавляет новую таблицу на страницу.


function ch_tbl_section()
{
    if(!
http)
    {
        
http get_http();
        
xmlworking false;
    }

    if (!
xmlworking && http)
    {
        
xmlworking true;
        
        
url = .....;

        
http.open("GET"urltrue);
        
http.onreadystatechange = function()
        {
            if (
http.readyState == 4)
            {
                ...
                
xmlworking false;
            }
        }
        
http.send(null);
    }
    if(!
httpalert(\'Ошибка XMLHTTP!\');
}
« Последнее редактирование: 28 Июня 2006, 15:03:15 от Anthony »

Оффлайн vasa_c

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 157
  • +0/-0
  • 0
    • Просмотр профиля
    • http://blgo.ru/blog/
XMLHttpRequest
« Ответ #11 : 28 Июня 2006, 14:59:26 »
Опять this в конце
Блог ГО

Оффлайн Anthony

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
XMLHttpRequest
« Ответ #12 : 28 Июня 2006, 15:03:00 »
да нет, все ок. Я просто когда сюда писал ошибся. На сайте в правильно

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28