IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   Ajax в Opera, не проходит запрос (https://www.imho.ws/showthread.php?t=127598)

PhoeniX 26.12.2007 11:42

Ajax в Opera, не проходит запрос
 
Вложений: 1
В общем ситуация сложная (или я уже настолько запутался), попытаюсь объяснить:
есть две функции посылки запросов на сервер и соответственно 2 обработчика, необходимо при некотором условии вызывать 2 запрос к серверу из обработчика ответа 1-го запроса, вот 2 запрос не проходит (в opera, в ie и ff - нормально),
если же функцию второго обработчика вешать как событие на какой-нибудь элемент, то и в опере при наступлении этого события 2-ой запрос выполняется нормально.

Собственно вопрос - как устранить баг? :help:
ну и интересно, почему так происходит? :idontnow:

Понимаю, что объяснил довольно сбивчиво, но лучше что-то ничего в голову не лезет.


Соответственно пример кода в прилагаемом архиве:
index.php - пример кода с багом
index2.php - пример, когда второй запрос повешен на кнопку и все работает
get1.php, get2.php - обработчики запросов

RaZEr 26.12.2007 14:58

Ты приведи пример кода. В каком месте происходит ошибка. Тебе скажут как обойти.

PhoeniX 26.12.2007 15:33

Цитата:

Сообщение от RaZEr (Сообщение 1502373)
Ты приведи пример кода. В каком месте происходит ошибка. Тебе скажут как обойти.

Пример в приложенном архиве,
ошибки как таковой нету, если верить консоли ошибок оперы.

Конкретно:
вот так вот не работает (кусок из файла index.php):
Код:

function GetSubSectionsAndElementsResponce()
{
    if (xmlHttp.readyState==4)
    {
        if (xmlHttp.status==200)                         
        {
        var xmlResponse=xmlHttp.responseXML;
        var xmlDocumentElement=xmlResponse.documentElement;
        var idel=xmlDocumentElement.getElementsByTagName("idel");

        if (idel.item(0))
        {
            GetAutoByElement(idel.item(0).firstChild.data);
        }
        }
        else window.alert("При обращении к серверу возникли проблемы: "+xmlHttp.statusText);
    }
}

а вот так работает (кусок из файла index2.php):
Код:

function GetSubSectionsAndElementsResponce()
{
    if (xmlHttp.readyState==4)
    {
        if (xmlHttp.status==200)                         
        {
        var xmlResponse=xmlHttp.responseXML;
        var xmlDocumentElement=xmlResponse.documentElement;
        var idel=xmlDocumentElement.getElementsByTagName("idel");
            if (idel.item(0))
        {
            var element=document.getElementById("calc_form");
            var child=document.createElement('input');
            child.name="autobutton";
            child.type="button";
            child.value="click";
            child.onclick=function() {GetAutoByElement(idel.item(0).firstChild.data);}
                element.appendChild(child);
            }
        }
        else window.alert("При обращении к серверу возникли проблемы: "+xmlHttp.statusText);
    }
}

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

ИМХО, для понимания нужно посмотреть весь код, который в архиве, а не только эти 2 куска.

Hubbitus 07.01.2008 03:20

Может я чего-то не понимаю, но как в index.php при клике на любую из цифр (19,20,21) получаю алерт "toyota" что в FF что в Opera (версия 9.25), на сколько я понял, так и должно быть.
В index2.php наблюдается также одинаковое поведение в двух вышеуказанных браузерах, только при каждом выборе плодится кнопка, и для получении алерта с тойотой, надо тыркнуть еще на любую из них...

PhoeniX 07.01.2008 04:59

Hubbitus, ты все правильно понял. Сейчас скачал оперу 9.25 - действительно все сработало как и должно.

Вопрос стоит переформулировать - не работает на опере до какой-то определенной версии (точно не работает на 9.02 и 8.х (точную версию не помню - на работе осталась)).

Вероятно, это баг браузера, который поправили, и если это так, то, скорее всего, решения проблемы, кроме как обновление оперы, найдено не будет :(

Hubbitus 07.01.2008 13:43

Ну если баг, то скорее всего есть и WorkAround - осталось только понять в чем именно баг.

К сожалению на сайте Оперы самая старая для скачивания 9.10 ( http://www.opera.com/download/index....m=Linux%20i386 ) так что не могу даже посмотреть... Попробую найти старее, тогда уже и говорить можно будет.

Ну а вообще, для подобного, просто рекомендую использовать какие-нибудь кроссбраузерные библиотеки, хоть Котияровский JSHTTPRequest, хоть Prototype, хоть от Гугла или яху, по душе AJAX-фреймворк подобрать. Они тем и хороши, что люди именно ими занимаются, долгое время оттачивают, исправляют баги, и в том числе, реализуют поведение для работы поверх подобных недочётов браузеров.

Псих 07.01.2008 16:06

Цитата:

Сообщение от PhoeniX (Сообщение 1506722)
Вероятно, это баг браузера, который поправили, и если это так, то, скорее всего, решения проблемы, кроме как обновление оперы, найдено не будет

От себя замечу, что недавно была версия Оперы, в которой резко перестала работать добрая половина сервисов Google (календарь, Docs и т.д)

Hubbitus 16.01.2008 12:05

PhoeniX, посмотрел в Опере 9.10 - могу подтвердить - действительно не работает :)

Я при беглом осмотре и паре попыток не смог обнаружить как это обойти.

Однако, не вижу смысла и разбираться с этим Багом (теперь хоть понятно что это так, и оно даже исправлено уже в новых версиях) - майнтейнеры библиотек пусть с этим возятся, на мой взгляд. Если очень интересна причина, по их же форумам и багтрекерам надо лазить.


Часовой пояс GMT +4, время: 01:15.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.