访问socket.io回调函数之外的变量

时间:2012-08-01 14:19:19

标签: javascript node.js socket.io

我对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?任何帮助或建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

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