【前后端交互】基础知识点----上

目录

一、模板引擎

Ⅰ.art-template模板引擎的使用

Ⅱ.标准语法{{}}

二、正则表达式与字符串操作

三、XMLHttpRequest基本使用

 Ⅰ.使用xhr发起GET请求

Ⅱ.使用xhr发起post请求

四、JSON

Ⅰ.JSON对象结构

Ⅱ.JSON数组结构

Ⅲ.JSON和JS对象互换

五、XMLHttpRequest Level2新特性

Ⅰ.设置HTTP请求时限

Ⅱ.FormData对象管理表单数据

Ⅲ.上传文件

Ⅳ.显示文件上传进度

六、jQuery高级用法

Ⅰ.实现文件上传

Ⅱ.实现loading效果

七、Axios


一、模板引擎

根据程序员指定的模板结构和数据,自动生成一个完整的HTML页面

        ①减少了字符串的拼接操作

        ②代码结构更加清晰

        ③使代码更易于阅读与维护


Ⅰ.art-template模板引擎的使用

        ①导入art-template

        ②定义数据

        ③定义模板

        ④调用template函数

        ⑤渲染HTML结构

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 1.导入模板引擎 -->
    <script src="./lib/template-web.js"></script>
    <!-- 导入模板引擎后,window全局就会多一个函数叫做template('模板的id','需要渲染的数据对象') -->
    <script src="./lib/jquery.js"></script>
    <title>Document</title>
</head>
<body>
    <div id="container"></div>
    <!-- 3.定义模板 -->
    <!-- 3.1模板的html结构,必须定义到script标签中 -->
    <script type="text/html" id="tpl-user">
        <h1>{{name}}-----{{age}}</h1>
    </script>
    <script>
        // 2.定义需要渲染的数据
        var data = {
                name: '张三',
                age: 20,
            }
            // 4.调用template函数
        var htmlStr = template('tpl-user', data)
            // 5.渲染html结构
        $('#container').html(htmlStr);
    </script>
</body>

Ⅱ.标准语法{{}}

输出:  变量输出、对象输出、三元表达式输出、逻辑或输出、加减乘除等表达式输出       


原文输出:{{@ value}}  

如果要输出的value值中包含了html标签结构,则需要使用原文输出语法,才能保证html标签被正常渲染


条件输出:{{}}中使用if...else if.../if

        {{if value}} 按需输出的内容{{/if}}

        {{if value1}}按需输出的内容{{else if value2}}按需输出的内容{{/if}}


循环输出:{{}}中使用each循环数组

当前循环的索引使用$index进行访问,当前循环项使用$value进行访问

        {{each arr}}

                {{$index}}  {{$value}}

        {{/each}}


过滤器  本质就是一个function处理函数

调用过滤器函数:

        {{value | filterName}}

                类似管道操作符。它的上一个输出作为下一个输入

定义过滤器:

template.defaults.imports.filterName=function(value){
            /*return 处理结果*/}

 过滤器的应用----格式化时间

<!-- 1.导入模板引擎 -->
<script src="./lib/template-web.js"></script>
<div id="container"></div>
<!-- 3.定义模板 -->
<script type="text/html" id="tpl-user">
    <h3>{{regTime | dataFormat}}</h3>
</script>

<script>
   template.defaults.imports.dataFormat = function(date) {
          var year = date.getFullYear();
          var month = date.getMonth() + 1;
          var day = date.getDate();
          return year + '-' + month + '-' + day;
    }
    // 2.定义需要渲染的数据
    var data = {
           regTime: new Date()
        }
    // 4.调用template函数
    var htmlStr = template('tpl-user', data)
    // 5.渲染html结构
    $('#container').html(htmlStr);
</script>

封装简易的模板引擎:点击查看代码


二、正则表达式与字符串操作

exec()用于检测字符串中的正则表达式的匹配

如果字符串中有匹配的值,则返回该匹配的值,否则返回null

正则表达式中()包起来的内容表示一个分组,可以通过分组来提取自己想要的内容

提取分组

var str='<div>我是{{name}}</div>';
var pattern =/{{([a-zA-Z]+)}}/;
var result=pattern.exec(str);
console.log(result);
//得到name相关的分组信息
// [
//     '{{name}}',
//     'name',
//     index: 7,
//     input: '<div>我是{{name}}</div>',
//     groups: undefined
//   ]

字符串的replace函数

用于在字符串中用一些字符替换另一些字符

var str='<div>我是{{name}}</div>';
var pattern =/{{([a-zA-Z]+)}}/;
var result=pattern.exec(str);
str=str.replace(result[0],result[1]);
console.log(str);
//<div>我是name</div>

while循环与多次replace

var str='<div>{{name}}今年{{ age }}岁</div>';
var pattern=/{{\s*([a-zA-Z]+)\s*}}/;
while(pattern.exec(str)){
    str=str.replace(pattern.exec(str)[0],pattern.exec(str)[1]);
}
console.log(str); //<div>name今年age岁</div>

replace替换为真值

var data={
    name:'张三',
    age:18
};
var str='<div>{{name}}今年{{ age }}岁</div>';
var pattern=/{{\s*([a-zA-Z]+)\s*}}/;
while(pattern.exec(str)){
    str=str.replace(pattern.exec(str)[0],data[pattern.exec(str)[1]]);
};
console.log(str); //<div>张三今年18岁</div>

三、XMLHttpRequest基本使用

XMLHttpRequest简称xhr,是浏览器提供的javascript对象,请求服务器上的数据资源.

jquery中的ajax函数,就是基于xhr对象封装出来的,如下图所示


 Ⅰ.使用xhr发起GET请求

①创建xhr对象

②调用xhr.open(‘请求方式’,’url地址’)

③调用xhr.send()

④监听xhr.onreadystatechange事件


xhr的readyState属性

  表示当前Ajax请求所处的状态,每个Ajax请求必然处于一下状态中的一个:

                0:  xhr对象已经被创建,但尚未调用open()方法

                1:  open()方法已经被调用

                2:   send()方法已经被调用,响应头也已经被接收

                3:    数据接收中此时response属性中已经包含部分数据

                4:    Ajax请求成功,这意味着数据传输已经彻底完成或失败


查询字符串

        在url的末尾加上用于向服务器发送信息的字符串(变量)

        格式:将英文的?放在url的末尾,然后再加上参数=值,想加上对个参数的话,使用&符号进行分隔,以这个形式,可以将想要发送给服务器的数据添加到url中。

get请求携带参数的本质

  直接将参数以查询字符串的形式,追加到url地址的后面,发送到服务器

url地址中,只允许出现英文相关的字母、标点符号、数字,因此,在url地址中不允许出现中文字符,如果需要包含中文的字符,就必须对中文字符进行编码(转义)

url编码

        原则:使用安全的字符去表示不安全的字符

        使用三组%表示一个中文字符

encodeURI()编码函数

decodeURI()解码函数

var str='上海出版社';
var str2=encodeURI(str);
console.log(str2);  //%E4%B8%8A%E6%B5%B7%E5%87%BA%E7%89%88%E7%A4%BE
var str3=decodeURI(str2);
console.log(str3); //上海出版社

注意:浏览器会自动对URL地址进行编码操作


 使用xhr发起不带参数的GET请求

//1.创建xhr对象
var xhr=new XMLHttpRequest();
//2.调用open函数,指定请求方式与url地址
xhr.open('GET','http://www.liulongbin.top:3006/api/getbooks');
//3.调用send函数,发起Ajax请求
xhr.send();
//4.监听onreadystatechange事件
xhr.onreadystatechange=function(){
//4.1监听xhr对象的请求状态readyState,与服务器响应的状态status
if(xhr.readyState===4&&xhr.status===200){  //表示数据请求成功
     //4.2打印服务器响应回来的数据
     console.log(xhr.responseText);
    }
}

使用xhr发起带参数GET的请求

在调用在open期间为url地址指定参数即可

这种在url地址后面拼接的参数,叫做查询字符串

//1.创建xhr对象
var xhr=new XMLHttpRequest();
//2.调用open函数,指定请求方式与url地址
xhr.open('GET','http://www.liulongbin.top:3006/api/getbooks?id=1');
//3.调用send函数,发起Ajax请求
xhr.send();
//4.监听onreadystatechange事件
xhr.onreadystatechange=function(){
//4.1监听xhr对象的请求状态readyState,与服务器响应的状态status
if(xhr.readyState===4&&xhr.status===200){  //表示数据请求成功
     //4.2打印服务器响应回来的数据
     console.log(xhr.responseText);
    }
}

Ⅱ.使用xhr发起post请求

①创建xhr对象

②调用xhr.open(‘请求方式’,’url地址’)

③设置Content-Type属性

  xhr.setRequestHeader(‘Content-Type’,’application/x-www-form-urlencoded’)

④调用xhr.send(),同时指定发送的数据,数据以查询字符串形式提交给服务器

⑤调用xhr.onreadystatechange事件

//1.创建xhr对象
var xhr=new XMLHttpRequest();
//2.调用open()
xhr.open('POST','http://www.liulongbin.top:3006/api/addbook');
//3.设置Content-Type属性
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
//4.调用send(),同时将数据以查询字符串的形式,提交给服务器
xhr.send('bookname=水浒传&author=施耐庵&publisher=上海图书出版社');
//5.监听onreadystatechange事件
xhr.onreadystatechange=function(){
//5.1监听xhr对象的请求状态readyState,与服务器响应的状态status
      if(xhr.readyState===4&&xhr.status===200){  //表示数据请求成功
           //5.2打印服务器响应回来的数据
           console.log(xhr.responseText);
       }
}

数据交换格式

        服务器端与客户端之间数据传输与交换的格式 XML和JSON

        网页内容载体  html

        数据载体  xml


四、JSON

本质:用字符串表示js对象数据或数组数据

作用:在计算机与网络之间存储和传输数据

注意事项:

        ①属性名必须使用双引号包裹

        ②字符串类型的值必须使用双引号包裹

        ③JSON中不允许使用单引号表示字符串

        ④JSON不能写注释

        ⑤JSON最外层必须是对象或数组类型

        ⑥不能使用undefined或函数表示JSON的值


Ⅰ.JSON对象结构

表示为{}括起来的内容,数据结构为{key:value,key:value,...}的键值对结构

所有字符串必须是使用英文双引号包裹的字符串

Key必须是使用英文双引号包裹的字符串

Value的数据类型可以是数字、字符串、布尔值、null、数组、对象、


Ⅱ.JSON数组结构

表示为[]括起来的内容,数据格式为[value,value,value,...]

所有字符串必须是使用英文双引号包裹的字符串

数据类型可以是数字、字符串、布尔值,null、数组、对象


Ⅲ.JSON和JS对象互换

点击查看代码

转换为js对象(反序列化): 字符串转换为数据对象  JSON.parse()

转换为JSON字符串(序列化: 数据对象转换为字符串 JSON.stringify()

jquery中ajax请求的回调函数控制台输出是服务器返回的数据是js对象格式

XMLHttpRequest的监听函数的xhr.responseText是JSON字符串格式

封装属于自己的Ajax函数 :点击查看代码


五、XMLHttpRequest Level2新特性

①可以设置HTTP请求的时限

②可以使用FormData对象管理表单数据

③可以上传文件

④可以获取数据传输的进度信息

Ⅰ.设置HTTP请求时限

xhr.timeout=3000//将最长等待时间设为3000毫秒,过了这个时间,就自动停止HTTP请求
xhr.ontimeout=function(e){   //超时就触发这个函数
     alert('请求超时')
}

Ⅱ.FormData对象管理表单数据

提交表单数据

//1.新建FormData对象
var fd=new FormData();
//2.为FormData添加表单项
fd.append('uname','zhangsan');
fd.append('upwd','123456');
//3.创建XHR对象
var xhr=new XMLHttpRequest();
//4.指定请求类型与url地址
xhr.open('POST','http://www.liulongbin.top:3006/api/formdata');
//5.直接提交FormData对象,这与提交网页表单数据的效果,完全一样
xhr.send(fd);
xhr.onreadystatechange=function(){
    if(xhr.readyState===4&&xhr.status===200){
        console.log(xhr.responseText);
    }
}

获取表单数据

<form id="form1">
    <!-- autocomplete="off阻止自动填充行为 -->
    账号:<input type="text" name="uname" autocomplete="off">  
    密码:<input type="password" name="upwd" >
    <button type="submit">提交</button>
</form>
//1.获取表单元素
var form=document.querySelector('#form1');
//2.监听表单元素的submit事件
form.addEventListener('submit',function(e){
    e.preventDefault();
    //3.根据form表单创建FormData对象,会自动将表单数据填充到FormData对象中
    var fd=new FormData(form);
    var xhr=new XMLHttpRequest();
    xhr.open('POST','http://www.liulongbin.top:3006/api/formdata');
    xhr.send(fd);
    xhr.onreadystatechange=function(){
        if(xhr.readyState===4&&xhr.status===200){
            console.log(JSON.parse(xhr.responseText));
        }
    }
})

Ⅲ.上传文件

步骤:

        ①定义UI结构

        ②验证是否选择文件

        ③向FormData中追加文件

        ④使用xhr发起上传文件的请求

        ⑤监听onreadystatechange事件

<body>
    <!-- 1.定义UI结构 -->
    <!-- 文件选择框 -->
    <input type="file"id="file1">
    <!-- 长传文件的按钮 -->
    <button id="btnUpload">上传文件</button>
    <br/>
    <!-- img标签,来显示上传成功以后的图片 -->
    <img src="" alt="" id="img" width="800">
    <script>
        //2.验证是否选择了文件
        //2.1获取长传文件的按钮
        var btnUpload=document.querySelector('#btnUpload')
        //2.2为按钮添加click事件监听
        btnUpload.addEventListener('click',function(){
            //2.3获取到选择的文件列表
            var files=document.querySelector('#file1').files;
            if(files.length<=0){
                return alert('请选择要上传的文件');
            }
        //3.向FormData中追加文件
        //3.1创建FormData对象
            var fd=new FormData();
        //3.2向FormData中追加文件
        fd.append('avatar',files[0])//追加一个头像的文件
        })
        //4.使用xhr发起上传文件的请求
        //4.1创建xhr对象
        var xhr=new XMLHttpRequest();
        //4.2调用open函数,指定请求的类型和url地址,其中,请求类型必须为POST
        xhr.open('POST','http://www.liulongbin.top:3006/api/upload/avatar');
        //4.3发起请求
        xhr.send(fd)
        //5.监听onreadystatechange事件
        xhr.onreadystatechange=function(){
            if(xhr.readyState===4&&xhr.status===200){
                var data=JSON.parse(xhr.responseText);
                if(data.status===200){ //上传成功
                    //将服务器返回的图片地址,设置为img标签的src属性值
                    document.querySelector('#img').src='http://www/liulongbin.top:3006'+data.url;
                }else{ //上传文件失败
                    console.log(data.message);
                }
            }
        }
    </script>
</body>

Ⅳ.显示文件上传进度

通过监听xhr.upload.onprogress事件,来获取文件的上传进度

//创建xhr对象
var xhr=new XMLHttpRequest();
xhr.upload.onprogress=function(e){
    //e.lengthComputable是一个布尔值,表示当前上传的资源是否具有可计算的长度
    if(e.lengthComputable){
        //e.loaded已上传的字节
        //e.total 需传输的字节
        var percentComplete=Math.ceil((e.loaded/e.total)*100)
    }
}

通过监听xhr.upload.onload事件,监听上传完成的事件


六、jQuery高级用法

Ⅰ.实现文件上传

    <!-- 1.定义UI结构 -->
    <!-- 1.1导入jQuery -->
    <script src="./lib/jquery.js"></script>
<body>
    <!-- 1.2文件选择框 -->
    <input type="file"id="file1">
    <!-- 1.3上传文件按钮 -->
    <button id="btnUpload">上传文件</button>
    <script>
        //2.验证是否选择了文件
    $('#btnUpload').on('click',function(){
        //2.1将jQuery对象转换为DOM对象,并获取选中的文件列表
        var files=$('#file1')[0].files;
        //2.2判断是否选择了文件
        if(files.length<=0){
            return alert('请选择要上传的文件');
        }
        //3.向FormData中追加文件
        var fd=new FormData();
        fd.append('avatar',files[0]);
        //4.使用jQuery发起上传文件的请求
        $.ajax({
            method:'POST',
            url:'http://www.liulongbin.top:3006/api/upload/avatar',
            data:fd,
            //不修改Content-Type属性,使用FormData默认的Content-Type值
            contentType:false,
            //不对FormData中的数据进行url编码,而是将FormData数据原样发送到服务器
            processData:false,
            success:function(res){
                console.log(res);
            }
        })
    })
    </script>
</body>

Ⅱ.实现loading效果

1.ajaxStart(callback)

Ajax请求开始时,执行ajaxStart函数,可以在ajaxStart的callback中显示loading效果

//自jQuery版本1.8起,该方法只能被附加到文档
$(document).ajaxStart(function(){
    $('#loading').show();
})

注意:$(document).ajaxStart()函数会监听当前文档内所有Ajax请求

2.ajaxStop(callback)

Ajax请求结束时,执行ajaxStop函数,可以在ajaxStop的callback中隐藏loading效果

//自jQuery版本1.8起,该方法只能被附加到文档
$(document).ajaxStop(function(){
    $('#loading').hide();
})

七、Axios

      专注于网络数据请求的库

发起GET请求

axios.get('url',{ params:{/*参数*/} }).then(callback)
 var url='http://www.liulongbin.top:3006/api/get';
var paramsObj={
     name:'zhangsan',
     age:20
};
axios.get(url,{ params:{paramsObj} }).then(function(res){
      var result=res.data;
      console.log(result);
})

发起POST请求

axios.post('url',{/*参数*/}).then(callback)
var url='http://www.liulongbin.top:3006/api/post';
var params={
       address:'北京',
       location:'顺义区'
};
axios.post(url,params).then(function(res){
       var result=res.data;
       console.log(result);
})

使用axios发起请求

axios({
    method:'请求类型', 
    url:'请求的url地址',
    data:{/*post数据*/},
    params:{/*get参数*/}
}).then(callback)

使用axios发起GET请求

axios({
     method:'GET', 
     url:'http://www.liulongbin.top:3006/api/get',
     params:{
          name:'zhangsan',
          age:20
      }
}).then(function(res){
        console.log(res.data);
})

使用axios发起POST请求

axios({
    method:'POST', 
    url:'http://www.liulongbin.top:3006/api/post',
    data:{
        address:'北京',
        location:'顺义区'
    }
}).then(function(res){
    console.log(res.data);
})

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值