【问题标题】:how to speed up ajax calls to fetch record from php file如何加快ajax调用以从php文件中获取记录
【发布时间】:2015-02-19 11:59:24
【问题描述】:

我正在尝试向 php 文件发送 ajax 调用,该文件一次以 json 编码格式返回 1000 条记录,我将其附加在表中。一切正常,但需要很多时间导致页面挂起。下面是我的js代码。

$(window).load(function() {
    for (i = 0; i < 31; i++)
    {
        $.ajax({
            type: "GET",
            url: "filters.php",
            data: {limit: 1000, start_from: (i * 1000)},
            success: function(response) {
                var array = JSON.parse(response);

                Object.keys(array).forEach(function(key) {
                    oTable.fnAddData([
                        array[key][1],
                        array[key][2],
                        array[key][3],
                        array[key][4],
                        array[key][5],
                        array[key][6],
                        array[key][7],
                        array[key][8],
                        array[key][9],
                        array[key][10],
                        array[key][11],
                        array[key][12],
                        array[key][13],
                        array[key][14],
                        array[key]['link']
                    ]);
                });
            },
            datatype: 'json'
        });
    }    
});

【问题讨论】:

  • 尝试:oTable.fnAddData([...], false); 然后在每个循环调用 oTable.fnDraw(); 这将避免重绘表格 31 * 1000 次但 31 次。但更好的是过滤掉所有这些调用的 ajax 并只重绘一次表格,例如,使用 $.ajaxStop() 方法
  • 嗯,首先您需要确定慢的原因是什么。我的猜测是请求,但 fnAddData 方法看起来也很可疑。你应该使用console.profile(和console.profileEnd)来弄清楚发生了什么。
  • 我们可以看看你的 fnAddData 函数和你的 SQL 吗?
  • @Jezzabeanz 我猜这是数据表插件:legacy.datatables.net/ref#fnAddData
  • 检查文档,一切都是解释:Object.keys(array).forEach(function(key) { oTable.fnAddData([...], false);}); oTable.fnDraw(); 现在我不是数据表专家,但我想你最好使用分页并只显示相关数据,而不是一次显示 31000 行

标签: javascript php jquery ajax datatables


【解决方案1】:

试试这个:

$(window).load(function() {
    for (i = 0; i < 31; i++)
    {
        setTimeout(500,function(){
            $.ajax({
                type: "GET",
                url: "filters.php",
                data: {limit: 1000, start_from: (i * 1000)},
                success: function(response) {
                    var array = JSON.parse(response);

                    Object.keys(array).forEach(function(key) {
                        oTable.fnAddData([
                            array[key][1],
                            array[key][2],
                            array[key][3],
                            array[key][4],
                            array[key][5],
                            array[key][6],
                            array[key][7],
                            array[key][8],
                            array[key][9],
                            array[key][10],
                            array[key][11],
                            array[key][12],
                            array[key][13],
                            array[key][14],
                            array[key]['link']
                        ]);
                    });
                },
                datatype: 'json'
            });
        });
    }
    });

【讨论】:

  • 通过设置半秒延迟来加速?你抽过什么?
  • 尝试了代码 Babak,setTimeout 中的代码现在没有执行。我的意思是在尝试您的代码后它没有发送任何 ajax 调用..
  • 对不起,我的问题。误解了你的问题。
猜你喜欢
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-18
  • 2016-05-14
相关资源
最近更新 更多