论坛首页 Web前端技术论坛

定时器AJAX请求重帧现象

浏览 10570 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-05-25   最后修改:2011-05-25
cyh_it 写道
你可以使用在传参数时加一个随机数
{'a':Math.random()}
我在项目中是这样解决的
也可传new Date()

这个应该是解决页面缓存的问题的吧 呵呵
其实你看 我传的参数 ID 它本身就是自增的(是我没写明呵呵 ) 这样他每个都不一样的
而且我还设置了
xmlRequest1.setRequestHeader("If-Modified-Since","0");

这样页面本身就每次都请求的
0 请登录后投票
   发表时间:2011-05-25   最后修改:2011-05-25
fixsmall 写道
setInterval  请求,意味着: 每隔一秒都会发起请求, 如果一个请求还没有完成, 可能有网络延时, setInterval 就会发生同时有多个请求挂着, 改为 setTimeout 请求

function poll_data(){
$.post(url, data, function(){  // 以jquery的 post函数为例
  setTimeout( function(){
     poll_data() ; // 在请求完成后,再等一秒, 调用自身  
  },  1000);
});
}

这个方法应该可行 等我长时间测试以下
不过setTimeout 是在到这一行是停留一秒在继续执行setTimeout方法吧?
:wink:
Thank you!
0 请登录后投票
   发表时间:2011-05-25  
qingpu 写道
控制轮询获取的数据,把重复请求获取的数据剔除。不知道行不。

我也想到这个方法了,不过这个方法感觉有点弊病
1、我需要在页面中存储过去的数据
    2、这样还是避免不了相同ID请求的存在
    3、连接数还是增多了,虽然很少 ==同于2

呵呵
0 请登录后投票
   发表时间:2011-05-25  
其实你看 我传的参数 ID 它本身就是自增的(是我没写明呵呵 ) 这样他每个都不一样的

但我看到你的代码是:

var id = 0;  
window.onload = function() {  
    id = document.getElementById("maxId").value;  
    .....
}

id的值只是每一次页面加载是得到后,后面就没有再改变啊。
0 请登录后投票
   发表时间:2011-05-25  
fixsmall 写道
setInterval  请求,意味着: 每隔一秒都会发起请求, 如果一个请求还没有完成, 可能有网络延时, setInterval 就会发生同时有多个请求挂着, 改为 setTimeout 请求

function poll_data(){
$.post(url, data, function(){  // 以jquery的 post函数为例
  setTimeout( function(){
     poll_data() ; // 在请求完成后,再等一秒, 调用自身  
  },  1000);
});
}

这个方案可以完美解决,这种定时ajax请求,一定要做成这种形式:上次请求结束后才开始计算间隔
否则就会出现前面说的问题,当网络状况不好时可能多个请求会被密集
特别是是当服务器性能不足时,这样子请求会加重负担,多个请求同时进行,同时等待完成。
0 请登录后投票
   发表时间:2011-05-25  
你这个问题的本质好像就是缓存的问题 导致多次请求都一样 加个时间戳
0 请登录后投票
   发表时间:2011-05-25  
奥义之舞 写道
cyh_it 写道
你可以使用在传参数时加一个随机数
{'a':Math.random()}
我在项目中是这样解决的
也可传new Date()

这个应该是解决页面缓存的问题的吧 呵呵
其实你看 我传的参数 ID 它本身就是自增的(是我没写明呵呵 ) 这样他每个都不一样的
而且我还设置了
xmlRequest1.setRequestHeader("If-Modified-Since","0");

这样页面本身就每次都请求的


从现象上看确实应该是“cyh_it”说的问题, 建议使用google浏览器chrome然后查看newwork具体情况,可以知道原因的。
建议:
1. 少量数据还是用http的get方式好些
2. 在每次url后加时间如:url += '&__time=' + (new Date()).getTime(),不需要设置任何其他东西了
3. 使用工具监控具体http请求,可以使用firebug或者chrome network监控或者wireshark等软件
0 请登录后投票
   发表时间:2011-05-25  
cyh_it 写道
其实你看 我传的参数 ID 它本身就是自增的(是我没写明呵呵 ) 这样他每个都不一样的

但我看到你的代码是:

var id = 0;  
window.onload = function() {  
    id = document.getElementById("maxId").value;  
    .....
}

id的值只是每一次页面加载是得到后,后面就没有再改变啊。


是我的错 我的代码没贴完全 我只是解释这种AJAX重帧现象,忘了还有缓存的问题了, 这个我解释一下,不是缓存的问题 呵呵 我的ID 在下面是自增的了 不过是在回调函数里面的了
0 请登录后投票
   发表时间:2011-05-25  
nenyalanye_1 写道
你这个问题的本质好像就是缓存的问题 导致多次请求都一样 加个时间戳

呵呵 我修改一下 我在里面是对ID这个变量自增了的 所以说他每次请求的URL 是不一样的
0 请登录后投票
   发表时间:2011-05-25  
clue 写道
fixsmall 写道
setInterval  请求,意味着: 每隔一秒都会发起请求, 如果一个请求还没有完成, 可能有网络延时, setInterval 就会发生同时有多个请求挂着, 改为 setTimeout 请求

function poll_data(){
$.post(url, data, function(){  // 以jquery的 post函数为例
  setTimeout( function(){
     poll_data() ; // 在请求完成后,再等一秒, 调用自身  
  },  1000);
});
}

这个方案可以完美解决,这种定时ajax请求,一定要做成这种形式:上次请求结束后才开始计算间隔
否则就会出现前面说的问题,当网络状况不好时可能多个请求会被密集
特别是是当服务器性能不足时,这样子请求会加重负担,多个请求同时进行,同时等待完成。

是的 我也是怀疑是 网络延迟等各种状况造成的,  在一秒中他没有请求到所要请求的数据, 然后又进行下一个数据了,
这样的话ID就是一样的,没有增加,所以可能有几条数据都是相同的、、
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics