【问题标题】:paging through database results using jquery使用 jquery 对数据库结果进行分页
【发布时间】:2010-07-09 11:53:00
【问题描述】:

我正在寻找有关使用 jquery 从数据库中翻阅多个结果的难度的信息。我已经找到了一个插件,但我认为这不是我需要的。

我有一个包含 8 个文本框的表单。我想用第一个数据库结果填充这 8 个文本框,然后在有更多结果时显示分页。如果有更多结果,那么用户应该能够单击下一步按钮将新数据导入文本框。

大家有什么建议吗?

【问题讨论】:

  • 您想要下一个按钮来查询数据库(通过 ajax)以获取下一页还是通过第一个查询的结果进行分页,这些结果已经在某处的 DOM/JSON/XML 中?
  • 您好,Mercilor。谢谢您的帮助。这对我来说真的不重要。总共返回的行数永远不会超过 5 行,所以在这种情况下我并不担心性能。

标签: jquery pagination


【解决方案1】:

您没有提到您使用的是哪个底层平台。它是 ASP.NET MVC 吗? Ruby on Rails?分页支持通常内置在底层平台中。

如果你想进行 AJAX 或 JSON 调用,jQuery 肯定能够做到这一点,但调用的样子取决于你使用的平台。

如果是 Ruby,你应该在这里找到一些指导: http://www.sitepoint.com/article/ajax-jquery/

【讨论】:

  • 谢谢罗伯特。我正在使用 PHP。我看到的问题是 php 需要刷新才能获得当前的偏移量,而我被困在那里。不知道该怎么做。
【解决方案2】:

执行此操作的方式(或我执行此操作的方式)是将 ajax 调用绑定到分页链接。这些链接具有内置的 url,并且知道它们所指的页面。

例如

<a class="pager" href="/ajax_pages/get_results.php?page=3"> 3 </a>

现在您可以使用 jquery live 功能拦截对这些链接的点击

$(function() {
      $('a.pager').live('click',function() {
             var url = $(this).attr('href');
             $('#destination').load(url);
      }
 }

由于您使用的是“live”,因此您不必手动绑定新生成的 HTML。这样您的链接就可以立即使用了。

那么您所要做的就是根据请求的页面和限制(您的后端服务应该知道)生成偏移值。

替代方法非常接近,但需要在 javascript 中进行更多工作。让您的寻呼机调用的服务返回 json 编码数据。然后,您的回调函数必须使用此数据填充您的页面,然后更新您的分页链接,以便它们正常工作。

这可能是比每次都吹出整个表格更优雅的解决方案,但确实需要更多的工作。不太可能有明显的差异。

【讨论】:

  • 你好犀牛。感谢您的回复。抱歉,我没有早点回复说谢谢,但我已经被淹没了。我会试一试。再次感谢!
【解决方案3】:

就我个人而言,如果我知道我真的不会超过 5 页左右,我会完全放弃 Ajax 的东西......不是我不喜欢它......我只是不认为它在这种情况下是必要的。

<?php
// Example Database result (say, 2 "pages" worth)...
// We'll pretend the cells in your database match the textarea names...
$results = array(
    [0] => array(
        'textbox1'=>'abc',
        'textbox2'=>'def',
        'textbox3'=>'ghi',
        'textbox4'=>'jkl',
        'textbox5'=>'mno',
        'textbox6'=>'pqr'
        'textbox6'=>'stu'
        'textbox6'=>'vwx'
    ),
    [1] => array(
        'textbox1'=>'cba',
        'textbox2'=>'fed',
        'textbox3'=>'ihg',
        'textbox4'=>'lkj',
        'textbox5'=>'onm',
        'textbox6'=>'rqp'
        'textbox6'=>'uts'
        'textbox6'=>'xwv'
    )
)
$json_results = json_encode($results);
?>

<!-- Generate some jQuery and HTML -->
<script language="javascript">
    var pages = eval('<?=$json_results;?>');
    $(function() {
        $('.page_num').live('click',function() {
            var page = $(this).attr('rel');
            if(pages[page] && pages[page].length > 0) {
                $.each(pages[page],function(key,value) {
                    // assuming your key names are the same as the
                    // names of your textareas
                    $('textarea[name="'+key+'"]').value(value);
                });
            } else {
                alert("Oops, that page doesn't exist for some reason...");
            }
        });
    });
</script>

<?php foreach($results[0] as $key=>$value): ?>
<textarea name="<?=$key?>"><?=$value;?></textarea>
<?php endforeach; ?>

<div id="page_nums">
<?php for($i=1;$i<=sizeof($results)-1;$i++): ?>
<a class="page_num" href="#" rel="<?=$i;?>"><?=$i;?></a>
<?php endfor; ?>

【讨论】:

  • 嗨凯尔。非常感谢您的回复。对不起,我没有机会早点感谢你,但我被淹没了。我会试试这个建议,让你知道它是如何工作的。
  • 嘿凯尔,我在搞乱你的例子。首先,感谢代码示例。由于我几乎没有 JQ 经验,所以我想确保在我开始投入大量时间之前了解您发布的代码,结果发现它不会做我想做的事需要它。对我来说,你在那里的 php 数组。你能告诉我这应该如何工作吗?我的意思是,我有一个带有 8 个文本框的 html 页面。每个文本框都有不同的 id。在你的 php 数组中.. 哪个是 id?数组中的键还是值?
  • 我需要做的是翻阅不同的记录。一条记录填充所有 8 个文本框。然后用户可以单击分页链接转到下一条记录。不应动态添加 html 文本框,只应将数据导入文本框。这是这段代码应该工作的方式吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 2019-02-05
  • 2020-06-28
  • 2010-12-22
  • 2012-12-21
相关资源
最近更新 更多