我对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?任何帮助或建议将不胜感激。
答案 0 :(得分:0)
问题似乎是你只设置了一次maxpagenumber。您确实需要在每次数据集更改时进行设置。我认为你的第二组重做的一些组合将是最好的,但我不是100%熟悉jqPagination控件,所以这可能是事情没有成功的地方。你可能需要通过一些API调用为它提供一个新的maxPageNum吗?