Ajax——模板引擎

Posted 站错队了同志

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ajax——模板引擎相关的知识,希望对你有一定的参考价值。

模板介绍

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":17,"sex":"nan"}

以上是关于Ajax——模板引擎的主要内容,如果未能解决你的问题,请参考以下文章

template.js插件和ajax一起使用的例子

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

ajax里使用模板引擎

AJAX---模板引擎的使用

Ajax——模板引擎

ajax&模板引擎