Beh*_*nam 5 javascript asp.net ajax jquery
我使用下面的 ajax 调用从数据库中检索数据并将其显示在我的页面中。
$.ajax({
type: "POST", url: "MyPage.aspx/LoadGrid",
data: "{idyear:'2020'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
$(".gridBody").html(response.d);
},
failure: function (response) {
alert(response.d);
}
});
Run Code Online (Sandbox Code Playgroud)
目前此操作返回 1026 条记录,大约需要 12 秒。
由于这个过程很耗时,而且将来记录会更多,我必须找到一种替代方法来更快地加载数据。
所以,我尝试了另一种方法。我决定首先获取记录总数。例如,现在我有 1026 条记录,如果我想将数据加载到 100 条记录边界中,我需要同时进行 11 次 ajax 调用,并在所有 ajax 调用结束时合并结果。我认为通过应用这种方法,我可以一起开始所有呼叫,而不必等待结束呼叫才能开始新的呼叫。
var pagesize = 100;
getQty(function () {
var pagesqty = Math.floor(qty / pagesize);
if (qty % pagesize > 0) {
pagesqty += 1;
}
var control = 0;
for (var i = 0; i < pagesqty; i++) {
$.ajax({
type: "POST", url: "MyPage.aspx/LoadGridMtoN",
data: "{idyear:'2020' , page:'" + i + "' , pagesize:'" + pagesize + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
//alert(control+" succeed");
eval("var str" + i + "='" + response.d + "'");
control += 1;
if (control == pagesqty) {
var str = "";
for (var i = 0; i < pagesqty; i++) {
eval("str += str" + i);
}
$(".gridBody").html(str);
}
},
failure: function (response) {
alert(response.d);
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
但现在我在执行 ajax 调用时出现超时错误。有没有人知道任何更好的方法?
PS:我想尝试一下 web worker,但是在 web Worker 中好像不能使用 JQuery。
PS:我不想使用分页。我应该一起加载所有数据。
小智 1
您不想听到的答案是您需要修复服务器端。1026 条记录确实不应该花费 12 秒,特别是对于为客户端检索的数据而言。考虑减少 SQL 语句中的 JOIN 数量并在服务器端逻辑中聚合数据,并尝试对查询运行 EXPLAIN 并考虑索引是否合适。
要回答有关拆分 AJAX 调用的问题...
看起来您已经实现了分页,因此也许创建一个异步递归函数,一次获取 5-10 条记录,递增 pageNum 并在每个承诺响应后递归。您可以填充页面,用户将看到数据,而无需等待那么长时间。但是,您必须了解,这会增加服务器的容量,并且最终可能需要更长的时间才能获取所有数据。我觉得你试图实现这个目标的方式是不好的做法。
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |