1

我对 Javascript、Node.js 或 Socket.io 没有太多经验。我正在尝试使用 jQuery 分页插件http://beneverard.github.com/jqPagination/创建一个应用程序,该插件查询 mysql 数据库(使用用户输入文本框的关键字),获取结果总数连同第一页的前 15 个结果一起返回(使用 LIMIT),然后使用结果总数来确定需要多少页。

这是我无法工作的代码片段(用于设置分页最大页数的客户端 javascript):

var maxpagenumber;

socket.on('resultsnumber', function(count)
{
    maxpagenumber = ~ ~(this.count / 15) + 1;
});

$('.pagination').jqPagination({
    max_page: maxpagenumber,
    paged: function(page)
    {
        ...
    }
});

我查看了 Chrome 中的变量 maxpagenumber 并注意到它是未定义的。前 15 个结果的查询有效,只是分页只显示一个最大页面。

当我在网上四处寻找帮助时,我发现了一个关于访问异步回调函数之外的变量的问题:Using variable outside of ajax callback function。我使用了标记答案中的想法并将其应用于我的代码:

var setPagination = function(maxpagenum)
{
    $('.pagination').jqPagination({
        max_page: maxpagenum,
        paged: function(page)
        {
            ...
        }
    });
}

socket.on('databasenumber', function(count)
{
    var maxpagenumber = ~ ~(this.count / 15) + 1;
    setPagination(maxpagenumber);
});

这给出了与前面的代码片段相同的结果。到目前为止,我唯一的工作选择是:

socket.on('databasenumber', function(count)
{
    var maxpagenumber = ~ ~(this.count / 15) + 1;
    $('.pagination').jqPagination({
        max_page: maxpagenumber,
        paged: function(page)
        {
            ...
        }
    });
});

在用户将新关键字输入到文本框中再次搜索之前,这非常有效。一旦用户进行第二次搜索,就会出现许多错误。有人对如何使这项工作有任何想法吗?我应该显示更多代码来解释我的问题吗?也许我只是没有正确理解这段 Javascript 代码?任何帮助或建议将不胜感激。

4

1 回答 1

0

问题似乎是您只设置了一次 maxpagenumber 。您确实需要在每次数据集更改时进行设置。我认为你的第二组重做的一些组合将是最好的,但我不是 100% 熟悉 jqPagination 控件,所以这可能是事情没有解决的地方。您可能需要通过一些 API 调用为其提供一个新的 maxPageNum?

于 2012-08-01T16:13:22.970 回答