ajax结合豆瓣搜索进行分页如何实现(附代码)

这次给大家带来ajax结合豆瓣搜索进行分页如何实现(附代码),ajax结合豆瓣搜索进行分页实现的注意事项有哪些,下面就是实战案例,一起来看一下。

使用豆瓣api,得到分页结果。相当于从后台数据库获得的结果一样。所不同的是,没法事先知道页数。虽然通过请求api可以获得总页数,但由于ajax是异步的,所以对于分页一开始就要给出总页数来说,这是没有意义的。我使用了一个固定总页数65(正是搜索javascript书籍返回的总页数)。所以其他书籍是并不是65页,会出现多页或者少页的情况,这并不是bug。

特点

  1,全程不需要接触后台,前端独立就可以(我找过好长时间都没找过完整的例子)。
  2,使用了bootstrap的pagination制作页码和panel制作放置结果的面板。   

代码如下

                         .pagination> li > a {    cursor: pointer;   }   .pagination > li > span {    margin-left: 0;    color: #ccc;    background-color: transparent;    cursor: default;   }   .pagination > li > span:hover {   color: #ccc;     background-color: transparent;   cursor: default;    }   .m20 {    margin: 20px 0;   }       

书名 作者 出版日期 平均分 价格

var partPageModule = ( function ( $ ) { var initPager = null,// 初始换分页函数 setPagerHTML = null,// 生成分的页HTML代码 pageClick = null,// 每一页按钮的点击事件 ajax = null, // ajax请求后台数据 renderButton = null, $content = $( '' ) // 动态生成的页码 ; /* 功能:完成初始化 * @totalPages 总页数,从后端获取 * @currentPage 当前所在的页数 */ initPager = function ( totalPages, currentPage ) { $content = setPagerHTML({ currentPage: currentPage, totalPages: totalPages, pageClick: PageClick }) $( '#test' ).empty().append( $content );// 得到分页后添加到#test $( '#jumpToPage' ).click( function ( e ) {// 绑定GO按钮的点击事件 e.preventDefault(); PageClick( totalPages, $('#page').val() * 1); }) $( '#page' ).keyup( function ( e ) {// Enter键绑定搜索事件 if ( e.keyCode === 13 ) { $( '#jumpToPage').trigger( 'click' ); } }) $( '#result' ).html( '你点击的是第' + currentPage + '页') }; /* 功能:页码点击事件。重新生成所有页码,并且使用ajax获取数据 */ PageClick = function ( totalPages, currentPage ) { initPager( totalPages, currentPage ); ajax( currentPage );// 使用jsonp请求豆瓣 } ajax = function ( currentPage ) { var $input = $( '#bookName' ), bookName = '', $tbody = $( '#tbody' )// totalPages ; bookName = $input.val(); if ( !bookName ) { // 如果没有输入,就不要发送请求了 $input.focus(); return; } else { $.ajax({ type: 'get', url: 'https://api.douban.com/v2/book/search',// 豆瓣图书api dataType: 'jsonp', data: { q: bookName, start: ( parseInt( currentPage )-1 )*20 || 0 }, success: function ( data ) { var html = '', books = data.books ;// totalPages = Math.ceil( data.total / data.count ); books.forEach( function ( value, index ) { html += '' + '' + value.title + '' + '' + value.author + '' + '' + value.pubdate + '' + '' + value.rating.average + '' + '' + value.price + '' + ''; }) $tbody.html( html ); } }) }// return totalPages; } setPagerHTML = function ( options ) { var currentPage = options.currentPage, totalPages = options.totalPages, pageClick = options.pageClick, $content = $('
    '), startPage = 1, nextPage = currentPage + 1,//不需要考虑超出问题,后面有条件 prevPage = currentPage - 1 ; /* 逻辑处理,根据点击的不同的页生成不同的ul */ if ( currentPage == startPage ) {//当前页是起始页 $content.append( '
  • 首页
  • ' ); // 首页不可用 $content.append( '
  • 上一页
  • ' ); // 上一页不可用 } else { // 不是起始页 $content.append( renderButton( totalPages, 1, pageClick, '首页') ); // 生成首页并绑定事件 $content.append( renderButton( totalPages, prevPage, pageClick, '上一页') ); // 生成上一页并绑定事件 } if ( totalPages <=5 && currentPage <= 5 ) {// 总页数小于5,当前页小于5,全部生成页码 for ( var i = 1; i <= totalPages; i++ ) { if( i === currentPage ) { $content.append( '
  • ' + i + '
  • ' );// 当前页不可点击 } else { $content.append( renderButton( totalPages, i, pageClick, i) );// 其他页可以点击 } } } else if ( totalPages > 5 && totalPages - currentPage <= 2 ) {// 总页数大于5,当前页接近总页数,前面显示...,后面显示到结尾的页码 $content.append( '
  • ...
  • ' ); for( var i = totalPages - 4; i <= totalPages; i++ ) { if ( i === currentPage ) { $content.append( '
  • ' + i + '
  • ' ); } else { $content.append( renderButton( totalPages, i, pageClick, i) ); } } } else if ( totalPages > 5 && currentPage > 3) {// 总页数大于5,当前页在中间,前后生成...,生成中间页码 $content.append( '
  • ...
  • ' ); for ( var i = currentPage - 2; i < currentPage + 2; i++ ) { if ( i === currentPage ) { $content.append( '
  • ' + i + '
  • ' ); } else { $content.append( renderButton( totalPages, i ,pageClick, i) ); } } $content.append( '
  • ...
  • ' ); } else if ( totalPages > 5 && currentPage <= 3 ) {// 总页数大于5,当前页接近第一页,显示前面页码,后面显示... for ( var i = 1; i <= 5; i++ ) { if ( i === currentPage ) { $content.append( '
  • ' + i + '
  • ' ); } else { $content.append( renderButton( totalPages, i ,pageClick, i) ); } } $content.append( '
  • ...
  • ' ); } if ( currentPage == totalPages ) {//当前页是末页 $content.append( '
  • 下一页
  • ' ); // 下一页不可用 $content.append( '
  • 末页
  • ' ); // 末页不可用 } else { // 不是起始页 $content.append( renderButton( totalPages, nextPage, pageClick, '下一页') ); // 生成首页并绑定事件 $content.append( renderButton( totalPages, totalPages, pageClick, '末页') ); // 生成上一页并绑定事件 } return $content; } renderButton = function ( totalPages, goPageIndex, eventHander, text ) { var $gotoPage = $( '
  • ' + text + '
  • ' ); $gotoPage.click( function () { eventHander( totalPages, goPageIndex ); }) return $gotoPage; } return { init: initPager, ajax: ajax }  }(jQuery)) $( function () { $( '#search' ).click( function ( e ) { e.preventDefault(); var totalPage = partPageModule.ajax(1);// 由于ajax是异步的, totalPage = totalPage || 65;// 所以这个总页数是不准确的。一般这个数据是后端返回的。这里的65是javascript搜索的页数,不同的书籍搜索结果不一样,由于ajax异步执行,所以这里会默认为65。这里不是bug。 partPageModule.init( totalPage, 1 ); }) $( '#bookName' ).keyup( function ( e ) { if ( e.keyCode === 13 ) { $( '#search' ).trigger( 'click' ); } }) $( '#search' ).trigger( 'click' ); })

    登录后复制

    相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

    推荐阅读:

    ajax怎样提交form表单与实现文件上传

    Ajax向后台传输json格式数据出现错误应如何处理

    以上就是ajax结合豆瓣搜索进行分页如何实现(附代码)的详细内容,更多请关注【创想鸟】其它相关文章!

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

    发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2775687.html

    (0)
    上一篇 2025年3月8日 14:31:41
    下一篇 2025年3月1日 11:34:10

    AD推荐 黄金广告位招租... 更多推荐

    相关推荐

    • Ajax做出带验证码的局部刷新登录功能

      这次给大家带来Ajax做出带验证码的局部刷新登录功能,Ajax做出带验证码局部刷新登录的注意事项有哪些,下面就是实战案例,一起来看一下。 现在的登录界面大多数都带有:验证码的功能+验证码局部刷新+ajax登录。用ajax登录的好处最明显就是…

      2025年3月8日
      200
    • 使用Ajax时有哪些常见错误

      这次给大家带来使用Ajax时有哪些常见错误,处理Ajax的常见错误注意事项有哪些,下面就是实战案例,一起来看一下。 1, ajax 发送请求时状态判断 if else 语句问题。 var xhr = new XMLHttpRequest()…

      编程技术 2025年3月8日
      200
    • 为什么Ajax的请求会一次点击多次提交

      这次给大家带来为什么Ajax的请求会一次点击多次提交,Ajax请求一次点击多次提交的注意事项有哪些,下面就是实战案例,一起来看一下。 页面中的注意事项的type是submit的: ajax的请求,在JQuery中是: $(function …

      编程技术 2025年3月8日
      200
    • ajax怎么实现图片的预览上传以及查看缩略图

      这次给大家带来ajax怎么实现图片的预览上传以及查看缩略图,ajax实现图片的预览上传以及查看缩略图的注意事项有哪些,下面就是实战案例,一起来看一下。 要实现功能,上传图片时可以预览,因还有别的文字,所以并不只上传图片,实现与别的文字一起保…

      编程技术 2025年3月8日
      200
    • Ajax上传并预览图片(附代码)

      这次给大家带来Ajax上传并预览图片(附代码),Ajax上传并预览图片的注意事项有哪些,下面就是实战案例,一起来看一下。 1. 直接上最简单的 一种 ajax 异步上传图片,并预览 html: 图片上传 | cookie file: des…

      编程技术 2025年3月8日
      200
    • Ajax表单提交及后台处理

      这次给大家带来Ajax表单提交及后台处理,Ajax表单提交及后台处理的注意事项有哪些,下面就是实战案例,一起来看一下。 首先先说下表单提交吧,要提交表单那么就得先收集表单数据(至于验证这个我就不说了,要说留下下次吧),有了jquery取个h…

      编程技术 2025年3月8日
      200
    • Ajax的轮询请求状态如何实现

      这次给大家带来Ajax的轮询请求状态如何实现,实现Ajax轮询请求状态的注意事项有哪些,下面就是实战案例,一起来看一下。 这里要实现的功能是:通过扫码微信公众号带参数的二维码,来登录网站。 但很明显,如果ajax不间断的请求服务器,这样会加…

      编程技术 2025年3月8日
      200
    • ajax向服务器发送数据类型步奏详解

      这次给大家带来ajax向服务器发送数据类型步奏详解,ajax向服务器发送数据类型的注意事项有哪些,下面就是实战案例,一起来看一下。 1. 准备向服务器发送数据 Ajax 最常见的一大用途是向服务器发送数据。最典型的情况是从 客户端发送表单数…

      2025年3月8日 编程技术
      200
    • Ajax操作表单异步上传文件

      这次给大家带来Ajax操作表单异步上传文件,Ajax操作表单异步上传文件的注意事项有哪些,下面就是实战案例,一起来看一下。 1.起因 做前台页面时,需要调用WebAPI的Post请求,发送一些字段和文件(相当于把表单通过ajax异步发送出去…

      编程技术 2025年3月8日
      200
    • IE下的Ajax提交乱码如何处理

      这次给大家带来IE下的Ajax提交乱码如何处理,处理IE下Ajax提交乱码的注意事项有哪些,下面就是实战案例,一起来看一下。 哈哈,试了这么多还是encodeURIComponent管用啊!!!! 在汉字的位置加个保护措施:encodeUR…

      编程技术 2025年3月8日
      200

    发表回复

    登录后才能评论