调用后台的接口,前端利用js获取项目的内容。
前后端的分离就是这样操作的。
直接上例子:
首先,后台给的api如下:
获取广告位置列表 接口说明 查看广告平台所有的广告位 请求方法 请求方法 :post 请求地址 : /media/listAllPostion 输入参数说明 参数名称 类型 不为空 说明 备注 page int 不为空 当前的页数当前的页数 当前页数 pagesize int 不为空 每一页显示个数 pageSize 返回接口说明 { "code": 0, "count":12, "data": [ { "id": 10, "platform": "pc", "buss": "exp", "desc": "体验首页上墙", "size": "1024|420", "key": "exp_index_mid2" }, { "id": 7, "platform": "pc", "buss": "exp", "desc": "体验首页上墙广告", "size": "1440|320", "key": "exp_index_top" }, { "id": 4, "platform": "pc", "buss": "shixi", "desc": "实习首页交互链接", "size": "120|120", "key": "pc_index_down_li" }, { "id": 2, "platform": "pc", "buss": "shixi", "desc": "实习首页企业列表", "size": "120|120", "key": "pc_index_entlist" }, { "id": 1, "platform": "pc", "buss": "shxi", "desc": "首页banner广告", "size": "360|180", "key": "pc_index_topbann" } ], "msg": "ok" } data.code 返回值状态码 data.count 总记录条数 data.msg 返回描述 data.data.platform 平台 data.data.buss 业务 data.data.desc 描述 data.data.size 图片尺寸 data.data.buss key 广告位置唯一描述符建议英文 返回错误说明 返回码 说明 备注 0 成功 成功 -1 失败 msg 说明原因
前端的完整代码如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="renderer" content="webkit"> <meta http-equiv="Cache-Control" content="no-siteapp" /> <title>广告管理-实习吧广告管理系统</title> <!--[if lt IE 9]> <meta http-equiv="refresh" content="0;ie.html" /> <![endif]--> <link rel="shortcut icon" href="favicon.ico"> <link href="/public/static/css/bootstrap.min14ed.css?v=3.3.6" rel="stylesheet" /> <link href="/public/static/css/font-awesome.min93e3.css?v=4.4.0" rel="stylesheet" /> <link href="/public/static/css/plugins/sweetalert/sweetalert.css" rel="stylesheet"> <link href="/public/static/css/plugins/dataTables/dataTables.bootstrap.css" rel="stylesheet" /> <link href="/public/static/css/animate.min.css" rel="stylesheet" /> <link href="/public/static/css/style.min862f.css?v=4.1.0" rel="stylesheet" /> </head> <body class="gray-bg"> <div class="wrapper wrapper-content animated fadeInRight"> <div class="row"> <div class="col-sm-12"> <div class="ibox"> <div class="ibox-title"> <h5><a href="position-list-ceshi.html">广告管理</a> >> 刺猬实习 <span id="platform"></span></h5> </div> <div class="ibox-content"> <div class="form-inline"> <table class="table table-striped table-bordered table-hover" id="TableList"> <thead> <tr> <th class="center">ID</th> <th>描述</th> <th class="center">尺寸</th> <th class="center">业务</th> <th class="center">平台</th> <th class="center">操作</th> </tr> </thead> <tbody></tbody> </table> <div class="table-load" id="TableLoad"> <div class="table-nodata" id="TableLoadNo"> <a href="javascript:;" class="btn btn-w-m btn-primary">马上添加分类</a> </div> <div class="spiner-example" id="TableLoading"> <div class="sk-spinner sk-spinner-cube-grid"> <div class="sk-cube"></div> <div class="sk-cube"></div> <div class="sk-cube"></div> <div class="sk-cube"></div> <div class="sk-cube"></div> <div class="sk-cube"></div> <div class="sk-cube"></div> <div class="sk-cube"></div> <div class="sk-cube"></div> </div> </div> </div> <script type="text/template" id="TableTmpl"> {{ for (var i = 0, l = it.length; i < l; i++) { }} <tr> <td class="center">{{=it[i].id}}</td> <td>{{=it[i].desc}}</td> <td class="center">{{=it[i].size}}</td> <td class="center">{{=it[i].buss}}</td> <td class="center">{{=it[i].platform}}</td> <td class="center"> <div class="btn-group"> <button data-toggle="dropdown" class="btn btn-primary dropdown-toggle">操作 <span class="caret"></span> </button> <ul class="dropdown-menu"> <li><a href="position-detail.html?id={{=it[i].id}}&name={{=it[i].desc}}">管理</a></li> <li><a href="media-add.html?id={{=it[i].id}}&name={{=it[i].desc}}">添加</a></li> </ul> </div> </td> </tr> {{ } }} </script> </div> </div> </div> </div> </div> </div> <script src="/public/static/js/jquery.min.js?v=2.1.4"></script> <script src="/public/static/js/bootstrap.min.js?v=3.3.6"></script> <script src="/public/static/js/doT.min.js?v=1.0.3"></script> <script src="/public/static/js/content.min.js?v=1.0.0"></script> <script src="/public/static/js/plugins/sweetalert/sweetalert.min.js"></script> <script src="/public/static/js/admin.js"></script> <script> $(document).on('ready', function() { // 跳转到新建分类 $('#TableLoadNo').find('a').attr('href', 'position-add.html'); $platform = $.getUrlParam('platform');//获取URL的指定参数 console.log($platform);
$.zajax({ url: 'http://scrapy.ciweishixi.com/media/listAllPostion', data: { page: 1, pagesize: 100 }, success: function(data) { setTimeout(function() { if (data.code === 0 && data.data) { var $obj = data.data; //console.log(typeof $obj); //js获取的为对象 var arrayObj = new Array(); //创建一个数组,用来保存符合要求的字段 if ($platform) { //输出一个平台进行提醒 $('#platform').text(" >> "+$platform+"平台"); for (var i = $obj.length - 1; i >= 0; i--) { console.log($obj[i]['buss']); if ($obj[i]['buss'] == 'job' && $obj[i]['platform'] == $platform) { arrayObj.push($obj[i]); } } } else { for (var i = $obj.length - 1; i >= 0; i--) { console.log($obj[i]['buss']); if ($obj[i]['buss'] == 'job') { arrayObj.push($obj[i]); } } } console.log($obj); console.log(arrayObj); var tmpl = $('#TableTmpl').html(); var doTtmpl = doT.template(tmpl); var doThtml = doTtmpl(arrayObj); // 关闭加载状态 $('#TableLoading').remove(); // 插入数据 $('#TableList tbody').prepend(doThtml); } else { $('#TableLoading').remove(); $('#TableLoadNo').show(); } }, 500); }, error:function(err){ console.log(err); } }); }); </script> </body> </html>
1.首先,要实现这样的效果,需要从后台的接口文档中进行数据的获取
下面用的 dot.js是一个模板框架,在web前端使用。
简介一下dot.js:
dot.js作为模板引擎,
主要的用途就是,在写好的模板上,放进数据,生成含有数据的html代码。
这是很简单的web前端模板框架,简单说几个东西,你就会用了!
1、在模板中,it这个变量,就是传递进去的数据对象,应该就是英语的items;
2、doT.template( template )( obj ) 代码解释:把模板template,作为参数传入doT.template() 方法,dot就把模板处理一下,然后你再把数据对象传入,返回值,就是html与数据 一起生成的html代码了,再拼接到页面即可;
3、在模板中,{{}} 包裹的内容,就是javascript代码,dot会负责处理,因为这写法怪异,新手一般出现模板写错的情况,仔细排查即可 。
接下来就是前端js代码的逐行分析了。
$(document).on('ready', function() { // 跳转到新建分类 $('#TableLoadNo').find('a').attr('href', 'position-add.html'); $platform = $.getUrlParam('platform');//获取URL的指定参数 console.log($platform); $.zajax({ url: 'http://scrapy.ciweishixi.com/media/listAllPostion', data: { page: 1, pagesize: 100 }, success: function(data) { setTimeout(function() { if (data.code === 0 && data.data) { var $obj = data.data; //console.log(typeof $obj); //js获取的为对象 var arrayObj = new Array(); //创建一个数组,用来保存符合要求的字段 if ($platform) { //输出一个平台进行提醒 $('#platform').text(" >> "+$platform+"平台"); for (var i = $obj.length - 1; i >= 0; i--) { console.log($obj[i]['buss']); if ($obj[i]['buss'] == 'job' && $obj[i]['platform'] == $platform) { arrayObj.push($obj[i]); } } } else { for (var i = $obj.length - 1; i >= 0; i--) { console.log($obj[i]['buss']); if ($obj[i]['buss'] == 'job') { arrayObj.push($obj[i]); } } } console.log($obj); console.log(arrayObj); var tmpl = $('#TableTmpl').html(); var doTtmpl = doT.template(tmpl); var doThtml = doTtmpl(arrayObj); // 关闭加载状态 $('#TableLoading').remove(); // 插入数据 $('#TableList tbody').prepend(doThtml); } else { $('#TableLoading').remove(); $('#TableLoadNo').show(); } }, 500); }, error:function(err){ console.log(err); } }); });
1.由于需要判断用户点击的是哪个平台,因此我们需要获取URL的参数,jQuery中有封装好的函数直接使用。$.getUrlParam('platform');本页面的URL地址为 :position-job-list.html?platform=h5
$platform = $.getUrlParam('platform');//获取URL的指定参数
console.log($platform); //打印的结果为h5.
2.利用Ajax来调取后台的数据
后台的url为:
url: 'http://scrapy.ciweishixi.com/media/listAllPostion',
调用之后,后台会返回相应的数据
success: function(data) { setTimeout(function() { if (data.code === 0 && data.data) { var $obj = data.data; //console.log(typeof $obj); //js获取的为对象 var arrayObj = new Array(); //创建一个数组,用来保存符合要求的字段 if ($platform) { //输出一个平台进行提醒 $('#platform').text(" >> "+$platform+"平台"); for (var i = $obj.length - 1; i >= 0; i--) {if ($obj[i]['buss'] == 'course' && $obj[i]['platform'] == $platform) { arrayObj.push($obj[i]); } } } else { for (var i = $obj.length - 1; i >= 0; i--) { console.log($obj[i]['buss']); if ($obj[i]['buss'] == 'course') { arrayObj.push($obj[i]); } } } console.log($obj); console.log(arrayObj); var tmpl = $('#TableTmpl').html(); var doTtmpl = doT.template(tmpl); var doThtml = doTtmpl(arrayObj); // 关闭加载状态 $('#TableLoading').remove(); // 插入数据 $('#TableList tbody').prepend(doThtml); } else { $('#TableLoading').remove(); $('#TableLoadNo').show(); } }, 500); }, error:function(err){ console.log(err); }
3.新建一个数组来保存符合条件要求的字段
var arrayObj = new Array(); //创建一个数组,用来保存符合要求的字段
4.将符合要求的push到新数组中
arrayObj.push($obj[i]);
5.将适合要求的数据append到前端
var tmpl = $('#TableTmpl').html();
var doTtmpl = doT.template(tmpl); var doThtml = doTtmpl(arrayObj); // 关闭加载状态 $('#TableLoading').remove(); // 插入数据 $('#TableList tbody').prepend(doThtml);