【发布时间】: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