javascript ajax 有时无法执行

标签 javascript ajax events load

我正在使用以下 ajax 函数:

function callAjax(request,callback)
{
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            if(callback != null)callback(xmlhttp.responseText);
        }
    }
    xmlhttp.open("GET",request,true);
    xmlhttp.send();
}

而且我发现,当我连续调用这个函数3次或更多次时,有些回调有时不会被执行。发生ajax请求并返回结果,但不知何故回调函数没有被调用。更糟糕的是,这种情况甚至不会持续发生——有时有效,有时无效。我想知道的是,为什么?更重要的是,我该如何解决它?据我所知,如果回调之间至少有 4 毫秒的间隔,回调就会运行。如果其中两个页面在该时间范围内返回,则实际上只会处理其中一个页面(我相信是第二个页面,但我不确定它总是如此)。

我知道我可以通过确保一次只等待一个 ajax 请求返回(通过自由使用 sleep())来解决这个问题。然而,这会显着减慢页面速度;我希望能够触发所有三个(或更多)请求,并让它们在返回时执行回调。

我做错了什么? 我该如何让它发挥作用?

注意:我不是在找人说“哦,你应该使用 jquery”。我不想为此使用任何外部库 - 请告诉我如何修复我的代码。

最佳答案

xmlhttp 是一个全局变量,因此如果同时发生多个调用,它将被覆盖。

您还使用 GET 请求。如果未设置不正确的标题,GET 请求将被缓存。请参阅"heartbeat" logger qustion有关如何避免缓存的详细信息。

关于javascript ajax 有时无法执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4411742/

相关文章:

javascript - 如何在 chameleon/zpt 模板( Pyramid )中正确包含 javascript 代码?

jquery - 使用jquery ajax将本地url连接到绝对url

php - 在 JS 处理程序或 PHP ajax 函数中为 ajax 函数生成 html 更好吗?

javascript - 我应该选择什么? jQuery、mootools、yui、scriptaculous 还是原型(prototype)?

javascript - 测试 Backbone 事件哈希

javascript - Q Promise 等效于 BlueBird Promise.Bind()

javascript - document.cookie 只存储第一个键值对?

java - 具有 2 个数据源事件处理的 JSlider

javascript - 使用 GAS 将值添加到所选单元格范围的单元格

java - java按下了什么按钮