Ajax

Ajax 实现步骤

1.创建Ajax对象

var xhr=new XMLHttpRequest()

2.告诉Ajax请求方式和地址

xhr.open('请求方式','地址')

3.发送请求

xhr.send()

4.获得服务器端与客户端的响应数据

xhr.οnlοad=function(){   xhr.responseText }     //xhr.responseText为客户端响应数据

 

服务器端响应的数据

项目中,一般服务器端大多数情况下把JSON对象作为响应数据的格式,客户端对JSON数据和HTMl字符串拼接

 

在http请求和响应过程中,无论是请求参数还是响应内容,如果是对象类型,会被转换为对象字符串进行传输

解决方案: JSON.parse()  //将json字符串转换为json对象

 

Get 请求参数

采取 拼接参数的形式   将拼接参数的值放在  Ajax请求方式和地址 open里面

 

Post 请求参数

1.要拼接请求参数的值要放在 发送请求 xhr.send  返回值

2.设置请求参数格式 (报文头,请求参数的格式)  //设置post请求参数必填 

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

3.服务器端接收Post请求参数 要借助第三方模块

const bodyParser = require('body-parser');

 

请求参数的格式

1.application/x-www-form-urlencoded    

name =zhang &age =20

2.application/json    //使用的时候要将json对象转换为字符串   JSON.stringify()       

注意!!!       get请求不能提交json对象数据格式     传统网站的表单提交也不支持json格式

{name:'zhangsan',age:'20'}

 

Ajax 状态码

Ajax状态码监听事件  xhr.onreadstatechange

 

Ajax 错误处理

1.网络畅通  服务器端能接收请求 服务器端返回的结果不是预期结果

解决方案:判断服务器端返回的状态码,分别进行处理,    xhr.status()  获取Http状态码

2.网络畅通 服务器端没有接收到请求,返回404状态码
解决方案:
检查请求地址是否错误

3.网络畅通   服务器端能接收请求 服务器端返回500状态码

解决方案: 服务器端错误,找后端程序员进行沟通

4.网络中断,请求无法发送到服务器

解决方案:触发xhr对象下面的onerror事件,在onerror事件处理函数中对错误进行处理

 

Ajax 低版本IE浏览器的缓存问题

解决方案 :在请求地址后面加上 请求参数,保证每一次请求中的请求参数的值不同

例: xhr.open('get','http://www.******'+Math.random())

 

Ajax 属于异步请求

 

Ajax 封装

请求代码  封装到函数中   发送请求时 直接调用函数

 

 

art-template 模板引擎 使用  

1.下载 art-template 模板引擎文件并在html页面中引用

语法: <script src="./js/template-web.js"></script>

2.准备 art-template 模板

语法:<script id ="tpl" type="text/html">      //设置 typte为text/html   系统将代码作为html执行

 <div class ='box'></div>

</script>

3.告诉模板引擎将哪一个模板和哪个数据进行拼接

语法: var html = template('要使用的模板id ',{数据对象})      //template方法 在引用模板引擎后出现

4.将拼接好的html字符串添加到页面中

语法:document.getElementByid('box').innerHTMl=html

5.通过模板语法告诉模板引擎 数据和html字符串如何拼接

语法:<script id ="tpl" type="text/html">      //设置 typte为text/html   系统将代码作为html执行

 <div class ='box'>{{username}}</div>

</script>

 

FormData 对象

使用场景

1.模拟HTMl表单,自动将表单对象中的数据拼接成参数的格式

2.异步上传二进制文件

 

模拟表单的使用过程  

客户端

1.准备HTML表单   //不需要提交按钮 提交地址  不适用于get请求

2.将HTML表单转换为formdata对象

var form = document.getElementById('form');

var formdata =new Formdata(form)

3.提交表单对象

xhr.send(formdata)

服务器端

// 创建formidable表单解析对象

    const form = new formidable.IncomingForm();

    // 解析客户端传递过来的FormData对象

    form.parse(req, (err, fields, files) => {    //err 错误对象   fields 表单中的普通请求参数  files文件

        res.send(fields);

    });

 

异步上传二进制文件使用过程

客户端

files为一个集合

服务器端

// 实现文件上传的路由

app.post('/upload', (req, res) => {

    // 创建formidable表单解析对象

    const form = new formidable.IncomingForm();

    // 设置客户端上传文件的存储路径

    form.uploadDir = path.join(__dirname, 'public', 'uploads');

    // 保留上传文件的后缀名字

    form.keepExtensions = true;

    // 解析客户端传递过来的FormData对象

    form.parse(req, (err, fields, files) => {

        // 将客户端传递过来的文件地址响应到客户端

        res.send({

            path: files.attrName.path.split('public')[1]

        });

    });

});

 

FormData文件上传进度展示

// 在文件上传的过程中持续触发

xhr.upload.onprogress = function (ev) {

                // ev.loaded 文件已经上传了多少

                // ev.total  上传文件的总大小

                var result = (ev.loaded / ev.total) * 100 + '%';

                // 设置进度条的宽度

                bar.style.width = result;

                // 将百分比显示在进度条中

                bar.innerHTML = result;

            }

 

FormData 对象 方法

1.获取表单对象中属性的值

语法:formData.get('key')    //key  为 要校验的 表单内容 name的值

2.设置表单对象中属性的值

语法:formData.set('key','value')   //key  为 要校验的 表单内容 name的值   value为要设置的值 如果不存在,创建并赋值

3.删除表达对象中属性的值    //用于双重验证密码,但是提交需要一个密码即可

语法:formData.delete('key')  

4.向表单对象中追加属性值

语法:formData.append('key','value') 

注:set方法  append方法区别 : 在属性名已存在的情况下,set会覆盖原来的值  append保存两个值

5.保存上传文件的后缀名

formData.keepExtensions  默认为不保存

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值