Ajax 编程

304 阅读5分钟

一、Ajax基础

1.Ajax概述:

浏览器提供的一套方法,可以实现页面无刷新更新数据,提高用户浏览网站应用的体验

2.Ajax的应用场景

  1. 页面上拉加载更多数据
  2. 列表数据无刷新分页
  3. 表单项离开焦点数据验证
  4. 搜索框提示文字下拉列表

3.Ajax的运行环境:

Node创建的服务器当中,及网站服务器

4.Ajax的实现步骤

  1. 创建Ajax对象

    var xhr=new XMLHttpRequest();

  2. 告诉Ajax请求地址以及请求方式

    xhr.open('get','www.example.com');

  3. 发送请求

    xhr.send();

  4. 获取服务器端给予客户端的响应数据

    xhr.onload=function(){ console.log(xhr.responseText); }

  5. 服务器端响应的数据格式 以JSON对象作为响应数据的格式

  6. 请求参数传递

    *GET请求方式 //配置ajax对象

    xhr.open('get', 'http://localhost:3000/get?' + params); *POST请求方式

  7. 请求参数的格式

      *?username=123&age=456
      //设置请求参数格式的类型 post请求必须要设置
      xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      *application/json{
          name:'zhangsan',
          age:'20',
          sex='男'
          };
      xhr.setRequestHeader('Content-Type', 'application/json');
    

JSON.stringify() //将json对象转换为json字符串 注意:get请求不能提交json对象数据格式的,传统网站的表单提交也不支持json对象数据格式的 8. 获取服务器端的响应 (了解) Ajax状态码: xhr.readyState //获取状态码 onreadystatechange 事件

xhr.onreadystatechange(function(){
        if(xhr.readyState == 4){
             console.log(xhr.responseText);
        }
})

9. Ajax错误处理

  • 网络畅通,服务器能接收到请求,服务器端返回的结果不是预期的结果可以判断服务器返回的状态码,分别进行处理, xhr.status 获取http状态码
  • 网络畅通,服务器端没有接收到请求,返回404状态码,检查请求地址是否错误
  • 网络畅通,服务器端能收到请求,返回500状态码,服务器端有错误
  • 网络中断,请求无法发送到服务器会触发xhr对象下面的onerror事件,在onerror事件处理函数中对错误进行处理

//Ajax状态码:表示Ajax请求的过程

//HTTP状态码:表示返回的结果

  1. 低版本IE浏览器的缓存问题 解决方案:在请求地址的后面加请求参数,保证每一次请求中的请求传参数的值不相同 xhr.open('get', 'http://localhost:3000/error?=' + Math.random());

  2. 同步异步概述

二、Ajax异步编程

1.Ajax封装

  • 问题:发送依次请求代码过多,发送多次请求代码冗余且重复
  • 解决方案:将请求代码封装到函数中,发送请求是调用函数即可

2.模板引擎

作用:使用模板引擎提供的模板语法,可以将数据和HTML拼接起来

下载art-template模板引擎库文件并在html页面中引入

aui.github.io/art-templat…

var html=template('模板id',{datadata})  //利用模板引擎中的template方法进行数据拼接

3.FormData

1.FormData对象的作用

*模拟HTML表单-->表单对象( var formData = new FormData(form);),自动将表单对象中的数据拼接成请求参数格式

*异步上传二进制文件

//不能用于get请求  xhr.send(formData);
const formidable = require('formidable');
app.post('/formData', (req, res) => {
    //1.创建formidable表单解析对象
    const form = new formidable.IncomingForm();
    //解析客户端传递过来的FormData对象
    form.parse(req, (err, fields, files) => {
        res.send(fields);
    })
});

FormData对象的实例方法

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

formData.get('key');

2.设置表单对象中属性的值 ---会覆盖原有的属性值

如果设置的表单属性不存在,将会创建这个表单属性,如果存在,将会覆盖属性原有的值

formData.set('key','value');

3.删除表单对象中属性的值

formData.delete('key');

4.向表单对象中追加属性值 ---不会覆盖已有的属性值,保留两个值

formData.append('key','value');

FormData二进制文件上传

<input type='file' id='file'/>

?FormData文件上传进度展示 FormData文件上传图片即时预览

Ajax请求限制:不能向别的服务器发送请求

*什么是同源:两个页面拥有相同的协议,域名,端口,有一个不同就不是同源

同源政策的目的:保证用户信息的安全 无法向非同源地址发送Ajax请求

*使用JSONP解决同源限制问题

//向模板中开放外部变量
template.defaults.imports.dataFormat=dataFormat;

CORS跨域资源共享:及非同源

//拦截所有请求  express框架下
app.use((req, res, next) => {
    //1.允许那些客户端访问我
    //2.代表允许所有的客户端访问我
    res.header('Access-Control-Allow-Origin', '*');
    //3.允许客户端使用那些请求方式访问我
    res.header('Access-Control-Allow-Methods', 'get,post');
    next();
})

访问非同源数据,服务器端解决方案 //服务器端向另一服务器端发送请求 引入第三方模块 request 服务器端直接没有同源政策

cookie复习:身份识别 相当于身份证 服务器端知道客户端

  • withCredentials属性
  • ajax技术发送跨域请求时,默认情况下不会在请求中携带cookie信息
  • withCredentials:指定在涉及到跨域请求时,是否携带cookie信息 默认值为false
  • Access-Control-Allow-Credentials:true 允许客户端发送请求时携带cookie
  1. $.ajax()方法 :发送Ajax请求 / 发送jsonp请求
  2. JSON.stringify() //将json对象转换为json字符串

 $.ajax(){
      type:
      url:
         //指定当前发送jsonp请求
      dataType:'jsonp',
      【   //修改callback参数名称
          jsonp:'cb',
          //指定函数名称
         jsonpCallback: 'fn'  】


    data:JSON.stringify(params),
    //指定参数格式
    contentType:'application/json';
    beforeSend:function(){
        //请求不会被发送
        return false;
    },
    success:function(response){
    },
    error:function(xhr){
    }
}

serialize方法

作用:将表单中的数据自动拼接成字符串类型的参数

var params=$('#form').serialize();
  • .get().get() .post() 方法 作用:发送get请求, 发送post请求
  • $.get('url','name=zhangsan&age=30',function(response){})
  • $.post('url',[对象/字符串],function(response){})

全局事件:只要页面中有ajax请求,对应的全局时间就会被触发

  • ajaxStart() //请求开始发送时触发
  • ajaxComplete() //请求完成时触发

<link rel:'stylesheet' href='nprogress.css' />
<script src='nprogress.js'></script>
$(document).on('ajaxStart',function(){
        NProgress.strat(); //进度条开始运动
})
$(document).on('ajaxComplete',function(){
        NProgress.done(); //进度条开始运动
})
  1. RESTful风格的API
  2. GET: 获取数据
  3. POST:添加数据
  4. PUT:更新数据
  5. DELETE:删除数据

XML基础

XML是 代表可扩展标记语言,作用就是传输和存储数据 XML DOM 即 XML文档对象模型,是w3c组织定义的一套操作XML文档对象的API 通过 xhr.responseXML 获取返回值