奇怪的javascript行为 - 一次多个活动的XMLHttpRequests?长时间运行脚本?

时间:2009-01-19 21:23:38

标签: javascript ajax

我正在尝试发出两个并发的AJAX请求。

第一次调用(/ajax_test1.php)需要很长时间才能执行(大约5秒左右)。 第二次调用(/ajax_test2.php)执行时间非常短。

我看到的行为是我/ajax_test2.php返回并且使用/ajax_test2.php中的内容调用处理程序(updateTwo())。

然后,5秒后,/ ajax_test1.php返回并且处理程序被调用(updateOne()),其中来自/ajax_test2.php的内容仍然是!!!

为什么会这样?

代码在这里:http://208.81.124.11/~consolibyte/tmp/ajax.html

3 个答案:

答案 0 :(得分:9)

这一行: -

req = new XMLHttpRequest();

应该是: -

var req = new XMLHttpRequest();

答案 1 :(得分:1)

正如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);
}

此致

加文

答案 2 :(得分:0)

Diodeus和Mike Robinson:

你们没有完全阅读我的帖子。我知道其中一个页面的执行时间比另一个页面要长。这是每个页面的预期行为。

HOWEVER 如果您阅读我的原始帖子,问题是两个页面的回调最终会被第一页的HTML内容调用< / em> only。

AnthonyWJones和Gavin:

谢谢你们!这就像一个魅力!我想我需要刷新我的Javascript!