Javascript xmlhttprequest始终
我正在尝试做一个聊天应用程序,所以我需要它始终接收服务器信息。因此,当请求完成时,在:Javascript xmlhttprequest始终,javascript,http,google-chrome,firefox,xmlhttprequest,Javascript,Http,Google Chrome,Firefox,Xmlhttprequest,我正在尝试做一个聊天应用程序,所以我需要它始终接收服务器信息。因此,当请求完成时,在: http.onreadystatechange=function(){ 我再次调用了该函数,因此: request(); 然后一切都在循环中发生。问题是,它只在谷歌浏览器中工作。浏览器和firefox,不要等到get.onreadystatechange=function(),然后继续以每秒100次的速度调用return(),没有任何原因:( 在google chrome中,“请求”的增长速度为每秒4次。
http.onreadystatechange=function(){
我再次调用了该函数,因此:
request();
然后一切都在循环中发生。问题是,它只在谷歌浏览器中工作。浏览器和firefox,不要等到get.onreadystatechange=function()
,然后继续以每秒100次的速度调用return(),没有任何原因:(
在google chrome中,“请求”的增长速度为每秒4次。在explorer和firefox中,它们的增长速度为每秒200次,因此出现了问题!在函数末尾,您需要使用
setTimeout(functionHere(),timeInMilisHere)
若要在指定时间后以毫秒为单位连续调用函数,我无法检查Explorer,但Firefox适用于您的示例,当我使用此小提琴时:
虽然这似乎对我有用,但也许可以尝试发出这些同步请求,以便一次只触发一个。请参见以下内容:
改变
get.open(“get”,“request.php”,true);
致:
get.open(“get”,“request.php”,false);
但是如果我在函数结束时调用它,我不需要时间,函数将以尽可能快的速度被调用。什么是你不需要时间?就像时间对被调用的函数没有任何影响一样?我不需要使用延迟来在一段时间内调用函数,因为我已经在函数结束时调用了它。所以就这样吧尽可能快地初始化,而不是使用request();
使用setTimeout(request(),1000)
如果你想要更多的时间,那会将调用间隔1秒,但是我会收到很多未完成的请求。我最好只在最后一个请求完成后才请求一个新请求,不是吗?看看开发人员工具中的“网络”选项卡。你得到缓存结果了吗?+1用于缓存。我已经创建了一个JSFIDLE,在IE中,302个响应请求的增量非常快
function request()
{
var get;
if (window.XMLHttpRequest)
{
get = new XMLHttpRequest();
}
document.getElementById("request_status").innerHTML = "requests: "+requests;
get.onreadystatechange=function()
{
if (get.readyState==4 && get.status==200)
{
requests+=1;
request();
}
}
get.open("GET","request.php",true);
get.send();
}