锁定老帖子 主题:定时器AJAX请求重帧现象
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-05-25
最后修改:2011-05-25
cyh_it 写道 你可以使用在传参数时加一个随机数
{'a':Math.random()} 我在项目中是这样解决的 也可传new Date() 这个应该是解决页面缓存的问题的吧 呵呵 其实你看 我传的参数 ID 它本身就是自增的(是我没写明呵呵 ) 这样他每个都不一样的 而且我还设置了 xmlRequest1.setRequestHeader("If-Modified-Since","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! |
|
返回顶楼 | |
发表时间:2011-05-25
qingpu 写道 控制轮询获取的数据,把重复请求获取的数据剔除。不知道行不。
我也想到这个方法了,不过这个方法感觉有点弊病 1、我需要在页面中存储过去的数据 2、这样还是避免不了相同ID请求的存在 3、连接数还是增多了,虽然很少 ==同于2 呵呵 |
|
返回顶楼 | |
发表时间:2011-05-25
其实你看 我传的参数 ID 它本身就是自增的(是我没写明呵呵 ) 这样他每个都不一样的
但我看到你的代码是: var id = 0; window.onload = function() { id = document.getElementById("maxId").value; ..... } id的值只是每一次页面加载是得到后,后面就没有再改变啊。 |
|
返回顶楼 | |
发表时间:2011-05-25
fixsmall 写道 setInterval 请求,意味着: 每隔一秒都会发起请求, 如果一个请求还没有完成, 可能有网络延时, setInterval 就会发生同时有多个请求挂着, 改为 setTimeout 请求
function poll_data(){ $.post(url, data, function(){ // 以jquery的 post函数为例 setTimeout( function(){ poll_data() ; // 在请求完成后,再等一秒, 调用自身 }, 1000); }); } 这个方案可以完美解决,这种定时ajax请求,一定要做成这种形式:上次请求结束后才开始计算间隔 否则就会出现前面说的问题,当网络状况不好时可能多个请求会被密集 特别是是当服务器性能不足时,这样子请求会加重负担,多个请求同时进行,同时等待完成。 |
|
返回顶楼 | |
发表时间:2011-05-25
你这个问题的本质好像就是缓存的问题 导致多次请求都一样 加个时间戳
|
|
返回顶楼 | |
发表时间: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等软件 |
|
返回顶楼 | |
发表时间:2011-05-25
cyh_it 写道 其实你看 我传的参数 ID 它本身就是自增的(是我没写明呵呵 ) 这样他每个都不一样的
但我看到你的代码是: var id = 0; window.onload = function() { id = document.getElementById("maxId").value; ..... } id的值只是每一次页面加载是得到后,后面就没有再改变啊。 是我的错 我的代码没贴完全 我只是解释这种AJAX重帧现象,忘了还有缓存的问题了, 这个我解释一下,不是缓存的问题 呵呵 我的ID 在下面是自增的了 不过是在回调函数里面的了 |
|
返回顶楼 | |
发表时间:2011-05-25
nenyalanye_1 写道 你这个问题的本质好像就是缓存的问题 导致多次请求都一样 加个时间戳
呵呵 我修改一下 我在里面是对ID这个变量自增了的 所以说他每次请求的URL 是不一样的 |
|
返回顶楼 | |
发表时间:2011-05-25
clue 写道 fixsmall 写道 setInterval 请求,意味着: 每隔一秒都会发起请求, 如果一个请求还没有完成, 可能有网络延时, setInterval 就会发生同时有多个请求挂着, 改为 setTimeout 请求
function poll_data(){ $.post(url, data, function(){ // 以jquery的 post函数为例 setTimeout( function(){ poll_data() ; // 在请求完成后,再等一秒, 调用自身 }, 1000); }); } 这个方案可以完美解决,这种定时ajax请求,一定要做成这种形式:上次请求结束后才开始计算间隔 否则就会出现前面说的问题,当网络状况不好时可能多个请求会被密集 特别是是当服务器性能不足时,这样子请求会加重负担,多个请求同时进行,同时等待完成。 是的 我也是怀疑是 网络延迟等各种状况造成的, 在一秒中他没有请求到所要请求的数据, 然后又进行下一个数据了, 这样的话ID就是一样的,没有增加,所以可能有几条数据都是相同的、、 |
|
返回顶楼 | |