模板介绍

1、必要性:ajax请求从服务器接收到大量数据,此时再用普通的字符串拼接是很耗费时间的,这时候模板就有其必要性

2、便利性:插件套用,现在有很多主流的模板插件:BaiduTemplate(百度开发) 、ArtTemplate(腾讯开发)、 velocity.js(淘宝开发) Handlebars

基本逻辑

1、script标签的type类型不能是默认的,改成text/template,这样就可以作为一个模板而不会被执行了

2、读取模板内的innerHTML

3、正则

4、正则中的exec方法不断的验证模板中是否有匹配的数据,()括号中的子项是键

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <script type="text/template" id="template">
<ul>
<li><%= name %></li>
<li><%= age %></li>
<li><%= skill %></li>
</ul>
</script>
<script>
var tempStr=document.querySelector("#template").innerHTML;
var obj={name:'wq',age:17,skill:'eat'};
var str=fox_template_pro(tempStr,obj);
document.write(str);
/*
str:模板
obj:准备替换的数据
*/
function fox_template_pro(str, obj) {
var reg = /<%=\s*([^%>]+\S)\s*%>/;// 中间的 小括号 可以对 正则 筛选出来的 字符串 再次筛选
var str = str;// 准备挖好坑的字符串
var obj = obj;// 准备 用来填坑的 对象
/*
第一个 <%= name %> 索引为0
第二个 name 索引为1
*/
var result;
while (result = reg.exec(str)) {
var key = result[1];// 获取匹配的key
var value = obj[key];// 通过key获取value
str = str.replace(result[0], value);// 替换的是<%= name %>
}
return str;//执行完毕说明替换完成了
}
</script>
</body>
</html>

腾讯模板

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title> </head>
<body>
<script src="js/template-native.js"></script>
<script type="text/template" id="template">
<ul>
<li><%=name%></li>
<li><%=age%></li>
<li><%=skill%></li>
<li>
<ul>
<%for (var i = 0; i < food.length; i++) {%>
<li><%=food[i]%></li>
<%}%>
</ul>
</li>
</ul>
</script>
<script>
var obj = {
name: 'wq',
age: 18,
skill: 'eat',
food: ['米饭', '土豆丝', '番茄', '花生', '玉米']
};
/*
参数1: 模板ID
参数2: 替换数据
*/
var resultStr = template('template',obj);
document.write(resultStr);
</script>
</body>
</html>

注意事项

1、接收数据单单是数组,必须包裹在对象中传入template方法

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script src="js/template-native.js"></script>
<script type="text/template" id="template">
<ul>
<li>
<ul>
<%for (var i = 0; i < info.length; i++) {%>
<li><%=info[i]%></li>
<%}%>
</ul>
</li>
</ul>
</script>
<script>
var ajax = new XMLHttpRequest();
ajax.open('get','10.php');
ajax.send();
ajax.onreadystatechange=function (ev) {
if (ajax.readyState==4&&ajax.status==200) {
var arr=JSON.parse(ajax.responseText);
console.log(arr);
var obj={info:arr};
var resultStr=template('template',obj);
document.write(resultStr);
}
}
</script>
</body>
</html>
<?php
header("content-type:text/html;charset=utf-8");
echo file_get_contents('files/04.json');
?>
["wq",17,"eat"]

2、接收数据是字符串,可以用[]括起来,然后包裹在对象中传入template方法

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script src="js/template-native.js"></script>
<script type="text/template" id="template">
<ul>
<li>
<ul>
<%for (var i = 0; i < info.length; i++) {%>
<li><%=info[i]['name']%></li>
<li><%=info[i]['age']%></li>
<li><%=info[i]['sex']%></li>
<%}%>
</ul>
</li>
</ul>
</script>
<script>
var ajax = new XMLHttpRequest();
ajax.open('get','10.php');
ajax.send();
ajax.onreadystatechange=function (ev) {
if (ajax.readyState==4&&ajax.status==200) {
var arr=JSON.parse(ajax.responseText);
console.log(arr);
var obj={info:[arr]};
var resultStr=template('template',obj);
document.write(resultStr);
}
}
</script>
</body>
</html>
<?php
header("content-type:text/html;charset=utf-8");
echo file_get_contents('files/05.json');
?>
{"name":"zs1","age":,"sex":"nan"}

Ajax——模板引擎的更多相关文章

  1. JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

  2. JavaScript学习总结(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

  3. JavaScript学习总结(二)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

  4. 第115天:Ajax 中artTemplate模板引擎(一)

    一.不分离与分离的比较 1.前后端不分离,以freemarker模板引擎为例,看一下不分离的前后端请求的流程是什么样的? 从上图可以看出,前后端开发人员的工作耦合主要在(3)Template的使用.后 ...

  5. ajax配合art-template模板引擎的使用

    最近才接触js的模板引擎听说相比以前使用的js foreach加载后台返回的json数据简便很多而且效率方面也很不错.今天自己玩了一下 后台使用的是.net mvc,数据库脚本就不提供了,返回的Jso ...

  6. Ajax概述,封装以及联合模板引擎进行数据交互

    欢迎大家去博客冰山一树Sankey,浏览效果更好.直接右上角搜索该标题即可 博客园主页:博客园主页-冰山一树Sankey CSDN主页:CSDN主页-冰山一树Sankey 更多资料可参考Ajax 介绍 ...

  7. AJAX里使用模板引擎

    一.概述: 处理响应数据渲染可以使用模板引擎(实际上就是一个API,目的是更容易的将数据渲染到HTML中) 目前市面上有许多模板引擎,可以参考 推荐使用artTemplate,它采用作用域预声明的技术 ...

  8. 浅谈 Web 中前后端模板引擎的使用

    前言 这篇文章本来不打算写的,实话说楼主对前端模板的认识还处在非常初级的阶段,但是为了整个 源码解读系列 的完整性,在深入 Underscore _.template 方法源码后,觉得还是有必要记下此 ...

  9. JS 模板引擎 BaiduTemplate 和 ArtTemplate 对比及应用

    最近做项目用了JS模板引擎渲染HTML,JS模板引擎是在去年做项目是了解到的,但一直没有用,只停留在了解层面,直到这次做项目才用到,JS模板引擎用了两个 BaiduTemplate 和 ArtTemp ...

随机推荐

  1. jquery转义字符之单引号

    jquery动态生成html,并且html中包含方法时,如 var varHtml = '<input type="button" value="点我删除" ...

  2. springmvc 日期转换器

    package com.xxx.common.controller.converter; import org.joda.time.DateTime; import org.joda.time.for ...

  3. Ubuntu 16.04安装NASM汇编IDE-SASM

    在Linux下,尤其是Ubuntu,SASM工具应该是用来开发汇编最好用的IDE,小巧且支持调试.支持的编译器有:NASM, MASM, GAS, FASM. 安装步骤: 下载: http://dow ...

  4. Linux服务管理(Ubuntu服务管理工具sysv-rc-conf)(转)

    Linux运行级别 Linux系统任何时候都运行在一个指定的运行级上,并且不同的运行级的程序和服务都不同,所要完成的工作和要达到的目的都不同,系统可以在这些运行级之间进行切换,以完成不同的工作. 运行 ...

  5. Ubuntu 16.04安装uGet替代迅雷,并在Chrome中设置为默认下载器

    uGet是采用aria2作为下载后端,所以两个软件都必须同时安装. 1.安装uGet sudo add-apt-repository ppa:plushuang-tw/uget-stable sudo ...

  6. 安装elasticsearch遇到的签名和目标被配置多次的问题

    命中:6 http://ppa.launchpad.net/ondrej/php/ubuntu bionic InRelease获取:7 http://packages.elastic.co/elas ...

  7. OCX 打包 CAB 与 JS 调用具体教程

        近期在做一个 WEB 项目.须要调用 OCX 进行连接读卡器读卡.本来并不想用 OCX 技术.由于 ActiveX 技术是微软出品.这样就导致整个系统仅仅能使用 IE 浏览器(其它浏览器能够通 ...

  8. 利用FFmpge进行视频压缩(从图像到H264视频流)

    对于FFmpeg相信做视频或图像处理这一块的都不会陌生,在网上也能找到非常多相关的代码.但因为版本号不同等原因.往往找到的代码都是须要自行改动才干够用,为此本人希望能尽绵薄之力,将开发包和自行编写的代 ...

  9. Android BroadcastAnyWhere(Google Bug 17356824)漏洞具体分析

    Android BroadcastAnyWhere(Google Bug 17356824)漏洞具体分析 作者:简行(又名 低端码农) 继上次Android的LaunchAnyWhere组件安全漏洞后 ...

  10. linux驱动之设备号与创建设备节点

    设备号: 1.自己主动分配 major = register_chrdev(0,"first_drv",&first_sdv_fops);//注冊 注冊设备时给设备号写0, ...