0

我有一个带有 jqgrid 的 web 应用程序,它使用 jquery ajax 填充数据,它调用 webmethod。jqgrid 每 5 秒刷新一次以轮询数据。我想做的是每 5 秒获取一次添加到表中的新数据。

所以我想我会修改我的网络方法,从最后读取的 ID 开始,分批获取 20 个数据。我认为在 webmethod 中我会做一个计数器,firstRecordID,lastRecordIDRead 变量,如果 counter = 0,我将获取第一个记录 ID 并将其存储在 firstRecordID 中,如果计数器大于 0,则 firstRecordID 将是 lastRecordIDRead(firstRecordID + 20)。因此,如果数据库中的第一个 ID 是 906,则在第一次轮询时它将获取从 906 到 925 的记录,然后在第二次轮询中它将从 926 + 20 条其他记录中获取并继续这样。

当在控制台应用程序中使用此方法作为示例时,它工作得很好,但是我不明白在使用 web 服务时我应该如何实现它,因为 web 服务是无状态的,我不知道我应该如何实现计数器变量等。任何想法好吗?或者也许是更好的解决方案?

非常感谢。

4

2 回答 2

0

您可以使用 Session 变量来跟踪事物,但我的建议是让网格自己管理这个计数器。

让网格发布一个包含它所在的 id 值的额外参数是相当简单的。您可以通过

postData: { KeyName: KeyValue}, 

在您调用(我假设通过计时器事件)刷新网格的情况下,只需添加在要求网格刷新时更新此参数的位置。

前任:

$('#gridName').jqGrid('setGridParam', { postData: { KeyName: KeyValue} }).trigger('reloadGrid');

在控制器端(我将展示 C# 代码,但基本原理相同),您将评估这个额外的值,以根据您的要求更改返回到 jqGrid 的数据。

public ActionResult GridData(string sidx, string sord, int page, int rows, bool _search, string filters, string KeyName)
        {
          //logic to change dataset being returned based on KeyName value.
          ...
于 2013-03-13T13:30:45.240 回答
0

如果我理解你的问题是正确的。我想您可以做的就是在数据中获取 ID 并将其保存在 jqGrid 的隐藏列中。在您的页面中再添加一个隐藏控件,使其初始值保持为 0。在您的服务调用中,将隐藏控件中的值作为参数发送。

在服务器端检查值是否为 0 获取前 20 行并发送回。例如,您从 906 到 925 获取行并发送回。ajax调用成功。在隐藏控件中保存 925。所以现在开始,当第二次调用发生时,它将不时发送隐藏控件的值,即 925,然后在服务器端,您可以获取从 926 到 945 的行。再次将 945 存储在隐藏控件中,因此第三次发送的值将是 945。这样,您可以在每个服务调用中保存最后一个 ID,并将该 ID 作为参数发送并获取下一行。

于 2013-03-13T13:32:32.277 回答