2019独角兽企业重金招聘Python工程师标准>>>

最近自己用thinkphp和bootstrap做一个小站点,在用到ajax与后台数据库交互实现无刷新分页时,因为我需要返回的数据是html代码,里面包含要显示出图片,然而返回数据到静态页面时,却发现返回的图片未被网页加载显示。找了一些资料,最后提取总结了别人一些经验,写了一个小技巧。这里纯属新手自学的总结,大牛们见怪莫怪。如果我的分享有不妥处,还望各位不吝赐教。

先说下主要操作的思路:当静态页面的ajax提交后到后台进行数据查询和处理后,返回类似以下的html字符串

<img src='' width='250px' hieght='100px' alt='image' data-url='/wamp/www/schoolbag/Public/img/s2.jpg'>

把这个用jquery的html方法插入的页面中是无法加载显示图片的。

大家应该注意到上面的img标签中的data-url,平时没有实际的意义,但是这里可以作为一个技巧来用,当ajax返回数据成功后,即可以执行如下操作

$('#ajax_content').html(data['html']);
var img_url = $('#ajax_content img').attr('data-url');
$('#ajax_content img').attr('src',img_url);

第一行代码是将字符串放到静态页面上;第二行是把img标签中的data-url里的字符串(这里是图片地址)赋值给img_url;  第三行则是把img的src属性替换为img_url里的值。这样就可以实现图片的加载显示了。

大体的思路是这样,里面还有处理翻页按钮的隐藏和显示,不过自己觉得处理得不够好。刚开始用thinkphp分页时是使用默认的风格,后来想用自己的样式,经过一番观察发现里面的翻页也就是get方式提交翻页的页码,所以可以在前端静态页面上的分页按钮上修改一些链接,使其符合thinkphp分类的方法,后台的数据处理按照手册上来就行。下面是详细的代码。

首先是静态代码:

<div class="container"><!--<div class="row"><div class="span2 muted"><h4>最新动态</h4></div><div class="input-append span2 offset7 "><input id="appendedInputButtons" type="text"><button class="btn" type="button">搜索</button></div></div>--><h4 class="muted">最新动态</h4><div class="hr"><hr /></div><ul class="thumbnails" id="ajax_content"><volist name="info_list" id="vo"><li class="span2"><div class="thumbnail">  <a href="{$vo.url}">        <img src="__PUBLIC__/img/s2.jpg" alt="" width="250px" hieght="100px"></a><div class="caption"  id="lcontent"><h3>{$vo.headline}</h3><p>{$vo.summary}</p><p class="muted">{$vo.publishTime}</p></div></div></li> </volist></ul></div><!--Thumbnails-end--><!--paging-begin--><div class="row-fluid paging"><li class="pull-left" id="pre_page"><!--<button class="btn btn-small" type="button" href="__ACTION__/p/{$pre_num}.html">< 上一页</button>--> <a href="__ACTION__/p/{$pre_num}.html" class="btn">< 上一页</a>           </li><li class="text-center active">{$c_num}/{$page_num}</li><li class="pull-right" id="next_page">                       <!--<button class="btn btn-small" type="button" href="__ACTION__/p/{$next_num}.html">下一页 ></button>--><a href="__ACTION__/p/{$next_num}.html" class="btn">下一页 ></a></li></div><!--paging-end-->

(因为这是利用bootstrap,所以用上面代码之前要先加载bootstrap,具体可以在官网http://bootstrap.ninghao.net/index.html学习,或者自己查些资料教程看看,用起来挺方便的。)

接下来是jquery的ajax提交:

<script>//首次加载页面时的操作,主要为了隐藏或显示翻页按钮$(document).ready(function (){{$adInpre_script}{$adInext_script}});$(function(){ //触发ajax提交$('.paging a').click(function(){ $.ajax({type: "GET",url:$(this).attr('href'),//取得a标签链接地址//返回数据前的操作beforeSend:function(){var loading = "<div class='progress progress-striped active'><div class='bar' style='width: 40%;'></div></div>";$("#ajax_content").html(loading);},//成功返回数据后的操作success:function(data){ $('#ajax_content').html(data['html']);var img_url = $('#ajax_content img').attr('data-url');$('#ajax_content img').attr('src',img_url);$('.paging li:eq(2) a').attr('href',data['n']);//写入下一页按钮的链接$('.paging li:eq(0) a').attr('href',data['p']);//写入上一页按钮的链接$(".paging li:eq(1)").text(data['c']);//写入当前页码和总页码//下面的操作是决定上一页和下一页按钮隐藏或显示$(".paging li:eq(0)").removeClass("display");$(".paging li:eq(2)").removeClass("display");$(".paging li:eq(0)").addClass(data['pre_li']);$(".paging li:eq(2)").addClass(data['next_li']);}});return false;//使a标签失效}) })</script>

然后是后台的数据处理:

$num=5;//每页的记录数$arr = array();//ajax返回的数组$info = M('Msg');$get_p = (empty($_GET['p']))?1:$_GET['p'];        $info_list = $info->order('id desc')->page($get_p,$num)->select();for ($i=0;$i<count($info_list,COUNT_NORMAL);$i++) {$info_list[$i]['publishTime']=date("Y-m-d H:i",$info_list[$i]['publishTime']);}for ($j=0;$j<$num;$j++) {      //ajax返回的一部分内容if (isset($info_list[$j]['id'])) {$arr['html'] = $arr['html']."<li class='span2'><div class='thumbnail'><a href='{$info_list[$j][url]}'><img src='' width='250px' hieght='100px' alt='image' data-url='/wamp/www/schoolbag/Public/img/s2.jpg'></a><div class='caption'><h3>{$info_list[$j][headline]}</h3><p>{$info_list[$j][summary]}</p><p class='muted'>{$info_list[$j][publishTime]}</p></div></div></li> ";}}               $this->assign('info_list',$info_list);//第一次打开网页时输出数据import("ORG.Util.Page");// 导入分页类$count = $info->count();// 查询满足要求的总记录数$Page = new Page($count,$num);// 实例化分页类 传入总记录数和每页显示的记录数$page_num=ceil($count/$num);//页码总数if (!empty($_GET['p'])) {   //这里代表有ajax提交$c_num = $_GET['p'];//当前页码if ($_GET['p']>=$page_num||$page_num==1) {//隐藏下一页按钮$arr['next_li'] = "display";}//隐藏pre按钮if ($_GET['p']<=1) {  //隐藏上一页按钮$arr['pre_li'] = "display";}$arr['c'] = "{$_GET['p']}"."/".$page_num;//ajax返回当前页码/总页码        $p = $_GET['p']-1;$n = $_GET['p']+1;$arr['n'] = '/wamp/www/schoolbag/index.php/Index/index/p/'.$n.'.html';//下一页按钮链接地址$arr['p'] = '/wamp/www/schoolbag/index.php/Index/index/p/'.$p.'.html';//上一页按钮链接地址$this->ajaxReturn($arr);//ajax返回数据}else {$c_num = 1;}$pre_num = $c_num-1;//上一页页码$next_num = $c_num+1;//下一页页码//隐藏下一页按钮$adInpre_script='$(".paging li:eq(2)").addClass("display");';if ($c_num>=$page_num||$page_num==1) {$this->assign('adInpre_script',$adInpre_script);}//隐藏上一页按钮$adInext_script='$(".paging li:eq(0)").addClass("display");';if ($c_num<=1) {$this->assign('adInext_script',$adInext_script);}$this->assign('page_num',$page_num);//输出总页码$this->assign('c_num',$c_num);//输出当前页码$this->assign('pre_num',$pre_num);//输出上一页页码$this->assign('next_num',$next_num);//输出下一页页码$this->display();

因为有注释,所以就不多讲了哈。本人只是小白,这些是仅供新手参考。因为逻辑比较简单,并且只是为了讲述小技巧,所以代码细节方面没做好,见谅。

转载于:https://my.oschina.net/u/1446867/blog/208773

thinkphp+ajax无刷新分页并加载显示图片相关推荐

  1. thinkphp ajax 无刷新分页效果的实现

    思路:先做出传统分页效果,然后重新复制一份Page.class.php类,对它进行修改,把js中的函数传到page类中,把上一页.下一页.首页.尾页.链接页中的url地址改成js控制的函数,模板页面中 ...

  2. .net MvcPager+Ajax无刷新分页

    .net  MvcPager+Ajax无刷新分页百度网盘链接: https://pan.baidu.com/s/1QmtBVH_sb4O6pNnEIsB5jw 1.新建Asp.net  Web项目,重 ...

  3. php页面自分页刷新,详解PHP+AJAX无刷新分页实现方法

    PHP+AJAX无刷新分页实现代码详解,最近在看ajax 教程,就想写个简单入门的PHP+AJAX无刷新分页,我们依据ajax开发框架,代码如下: var http_request=false; fu ...

  4. java ajax无刷分页_简单实现Ajax无刷新分页效果

    Ajax无刷新分页效果,如下代码实现 Ajax无刷新分页效果 function showpage(url) { var xhr = new XMLHttpRequest(); xhr.onreadys ...

  5. Axure教程:中继器如何加载显示图片

    编辑导语:在原型设计中,很多场景会应用到"中继器"这个元件.那么中继器如何加载显示图片的操作?很多新手都会无从下手.本文作者详细讲解了中继器加载显示图片的方法,供你学习. 一.元件 ...

  6. Android 使用imageLoader来加载显示图片

    简介 Android上最让人头疼的莫过于从网络获取图片.显示.回收,任何一个环节有问题都可能直接OOM,这个项目或许能帮到你.Universal Image Loader for Android的目的 ...

  7. 预加载显示图片的艺术

    一般情况下网页中的图片都是随文档流依次加载的,什么时候用到则什么时候加载,但是有些时候这样的加载方式往往会影响用户体验,比如鼠标hover变换背景图片的时候,只有鼠标移入才会对变换的图片进行加载,这样 ...

  8. mfc cimage加载显示图片_在微信小程序里实现图片预加载组件

    网页中的图片预加载 我们知道在 Web 页面中实现图片的预加载其实很简单,通常的做法是在 JS 中使用 Image 对象即可,代码大致如下 var image = new Image() image. ...

  9. php ajax无刷新分页源码,ajax实现无刷新分页(php)

    投票结果 function GetXmlHttpObject() { var xmlHttp=null; try { // Firefox, Opera 8.0+, Safari xmlHttp=ne ...

最新文章

  1. 静态call 动态call LINK
  2. 线性代数 —— 矩阵与矩阵运算
  3. linux mysql查看所有表_linux下查看指定进程的所有连接信息
  4. linux内存测试工具memtest,Linux-内存检测利器Memtest86+v1.70
  5. oracle 设置忽略关键字,记oracle里continue关键字的陷阱
  6. 图像的抽线、抽丝、抽图 神马是alpha通道
  7. 算法:回溯三 Combination Sum组合总数
  8. 网课查课插件 支持 60类型+ 彩虹查课插件 网络查课查询
  9. excel锁定前几行,无法选择和编辑
  10. RMS数据采集分布式架构
  11. 《伸手系列》之arm架构服务器安装kubernetes
  12. windows上用virtualbox运行mac虚拟机时怎样使用usb
  13. 我国将大力发展装配式建筑 2025年装配式建筑占新建建筑比例将超30%
  14. 比入赘还简单的——Python Flask Web 框架入门
  15. 如果我们总是等待绝对的一切就绪,那我们将永远无法开始
  16. scikit-image图像处理入门
  17. 常见的登录逻辑漏洞总结
  18. 骑士人才招聘系统源码SE版 v3.16.0
  19. anydesk 远程控制
  20. Windows上也可以开发 iOS App了

热门文章

  1. arcgis坐标系学习总结
  2. Python+selenium用法 上
  3. php 循环从数据库分页取数据批量修改数据
  4. SrpingCloud 之SrpingCloud config分布式配置中心实时刷新
  5. ACID、数据库隔离级别
  6. jquery常见的选择器
  7. 对Python认识和对我专业的影响
  8. QT之Quick学习笔记之一(Hello Qquick)
  9. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何获取标准驱动器扭矩值获取电流值
  10. mojo 关闭utf8