我正在使用以下 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/