2 andy15703166 andy15703166 于 2016.02.22 09:11 提问

ajax接收返回数据几百k延迟如何处理?

大家好,
我在用js+ajax接收服务器返回数据达到几百K,通过setTimeout不断加载造成经常会pending状态,经常不能获取到数据,怎么办?
希望在这方面有经验的高人指点迷津!谢谢!
代码类似如下所示:

 function getSchedule(date) {
            var request = {
                      ...
            };
            jQuery.ajax({
                  type   : 'POST',
                data   : request,
                success: function (response) {
                            jQuery("#data").html(loadInfo(response.data));
                  }
            });

                setTimeout(function() {
                     getSchedule(date);
                }, 30000);



        },

7个回答

u012662357
u012662357   2016.02.22 11:13
已采纳

如果请求过于频繁,建议使用websocket连接后台。

andy15703166
andy15703166 我打算这样修改了....
接近 2 年之前 回复
bdmh
bdmh   Ds   Rxr 2016.02.22 09:14

如果你自己通过setTimeout都能搞成这样,那么先看看你的服务器的承载能力吧,然后检查本机是不是过于频繁,导致cpu或内存吃紧

andy15703166
andy15703166 我的服务器是godaddy云虚拟机,1G内存,双核cpu,国内打开的时候会出现这样问题,国外没试过。setTimeout是30秒一次,这样也会有时候数据不能及时过来。这个问题就是硬件配置问题?
接近 2 年之前 回复
jessicaYing0728
jessicaYing0728   2016.02.22 10:32

看样子像是查询,考虑分页试试呢

andy15703166
andy15703166 不是查询,是一次性拽取展示
接近 2 年之前 回复
showbo
showbo   Ds   Rxr 2016.02.22 09:18

每次请求创建一个新的xhr而不是使用同一个xhr对象

andy15703166
andy15703166 怎么修改代码?
接近 2 年之前 回复
baidu_32262373
baidu_32262373   2016.02.22 09:46

在ajax前面定义个数组,如var aa = []; var bb = [];

将返回回来的值放到数组里试试
success:function(data){
$.each(data,function(index,obj){
aa = obj.date;

bb = obj.time;
});

baidu_32262373
baidu_32262373 回复jackykwan4343: 我这边做的项目是画一个K线图,一次性也从接口获取很多数值,就是用这种方法做的。
接近 2 年之前 回复
andy15703166
andy15703166 这样的话,setTimeout每次数组都是重置,岂不是没有意义?
接近 2 年之前 回复
rui888
rui888   Ds   Rxr 2016.02.22 09:46

非得一次加载那么多吗?

sinat_28023829
sinat_28023829   2016.02.23 17:56

把setTimeout写在success里面,可以结合分页。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!