Странное поведение javascript - несколько активных запросов XMLHttpRequest одновременно? Долгосрочные сценарии? - PullRequest
1 голос
/ 20 января 2009

Я пытаюсь выполнить два одновременных запроса AJAX.

Первый вызов (/ajax_test1.php) занимает очень много времени (5 секунд или около того). Второй вызов (/ajax_test2.php) занимает очень короткое время для выполнения.

Поведение, которое я наблюдаю, заключается в том, что I /ajax_test2.php возвращается и вызывается обработчик (updateTwo ()) с содержимым из /ajax_test2.php.

Затем, через 5 секунд, возвращается /ajax_test1.php и вызывается обработчик (updateOne ()) с содержимым из /ajax_test2.php еще !!!

Почему это происходит?

Код здесь: http://208.81.124.11/~consolibyte/tmp/ajax.html

Ответы [ 3 ]

9 голосов
/ 20 января 2009

Эта строка: -

req = new XMLHttpRequest();

должно быть: -

var req = new XMLHttpRequest();
1 голос
/ 20 января 2009

Как заявил AnthonyWJones, ваш javascript объявляет второй объект AJAX, который сначала перезаписывает переменную req (которая считается глобальной, так как нет переменной var), и вы также перезаписываете переменную ajax.

Вы должны отделить свой код, т.е.:

function doOnChange()
{
    var ajax1 = new AJAX('ajax_test1.php', 'one', updateOne);
    var ajax2 = new AJAX('ajax_test2.php', 'two', updateTwo);
}
function AJAX(url, action, handler)
{
    if (typeof XMLHttpRequest == "undefined")
    {
        XMLHttpRequest = function()
        {
            try { return new ActiveXObject("Msxml2.XMLHTTP.6.0") } catch(e) {}
            try { return new ActiveXObject("Msxml2.XMLHTTP.3.0") } catch(e) {}
            try { return new ActiveXObject("Msxml2.XMLHTTP") } catch(e) {}
            try { return new ActiveXObject("Microsoft.XMLHTTP") } catch(e) {}
            throw new Error( "This browser does not support XMLHttpRequest." )
        };
    }

    url = url + '?action=' + action + '&rand=' + Math.random()

    var req = new XMLHttpRequest();
        req.onreadystatechange = function() {
                if (req.readyState == 4)
                {
                    if (req.status == 200) 
                    {
                        alert('' + handler.name + '("' + req.responseText + '") ')
                        handler(req.responseText)
                    }
                }
            }

        req.open("GET", url, true);
        req.send(null);
}

Привет

Gavin

0 голосов
/ 20 января 2009

Диодей и Майк Робинсон:

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

ОДНАКО Если вы читаете мой оригинальный пост, проблема в том, что обратный вызов для обеих страниц заканчивается вызовом с содержимым HTML первой страницы только.

Энтони У. Джонс и Гэвин:

Спасибо, ребята! Это работает как шарм! Думаю, мне нужно освежить свой Javascript!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...