• Ajax总结


    Ajax总结

    ajax第一天

    简介:Ajax是一种技术、是能够使浏览器和服务器进行交互(请求响应)的一种技术。

    Ajax也是一套内置在浏览器端的API,核心对象是内置在浏览的中的 XMLHttpRequest ,通过这些API的调用,可以实现发送Ajax类型的请求和收取服务器端响应的数据。

    1.响应状态码

    200:表示OK
    304:客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容并没有改变,则服务器应当返回这个状态码。
    404:表示没有找到
    

    2.请求类型(Type)

    - Ajax类型的请求:通过浏览器工具,查看请求的Type列,标注为xhr的,就是Ajax请求
      使用XMLHttpRequest对象的API发送的请求
    - 非Ajax类型的请求:通过浏览器工具,查看请求的Type列,标注为document、stylesheet等,就是非Ajax请求
      没有XMLHttpRequest对象
    

    3.请求方式(Request Method)

    请求方式共有数十种,但是主要的请求方式就两种,一种为GET方式,一种为POST方式。
    - GET:得到,获取  //表单的method属性为GET或不指定
    - POST:邮寄,推送,提交  //表单的method属性为POST
    

    4.响应结果(Response)

    当浏览器向服务器发送了一个请求后,服务器会根据请求,做出响应。
    响应,即将浏览器请求的内容返回给浏览器。
    

    5.Ajax发送GET方式的请求

    //通用IP
    127.0.0.1      localhost     永远指向自己的计算机
    //简化URL
    访问的数据接口和html页面如果在同一个服务器上(即都可以使用相同的IP访问),那么数据接口中的IP地址可以省略
     xhr.open('GET', 'http://127.0.0.1:3000/time');
     xhr.open('GET', '/time');  //省略后
    
    //1.创建一个 xhr 对象
    var xhr = new XMLHttpRequest();
    //2.设置请求方式和路径
    xhr.open('GET','http://127.0.0.1:3000/time');
    //3.发送请求
    xhr.send();
    //4.注册事件,请求响应过程完全结束,会触发xhr.onload事件
    xhr.onload = function() {
      //通过xhr 的response 获取到响应的响应体
      console.log(this.response);
    }
    
    GET请求传参:(少量数据)
    请求参数又叫做查询字符串,一般用于告诉服务器此次请求的详细目的,比如查询什么、删除哪条记录等
    URL 携带查询字符串:
    URL中==问号后面==携带的就是 get 请求传参的数据,叫做查询字符串
    格式:q=word&sug=5017
    例: xhr.open('GET', '/query-get?id=2&name=zhangsan&age=23');
    

    6.IE缓存问题: (了解)

    两次或多次 AJAX GET 请求同一个 URL ,IE浏览器在第二次请求的时候,并不会从新向服务器发请求,而是直接使用上次请求的结果。

    解决: 让每次请求的URL都不同, 加查询字符串 '/time?t=' + Date.now()

    7.Ajax 发送 POST 方式的请求

    POST请求传参:(大量数据)
    post 传递数据,以键/值的形式出现,可以传输大量数据,不会显示在 URL 中。
    post 请求,必须调用setRequestHeader方法设置 Content-Type
    请求头中的 Content-Type,告诉服务器发送过去的数据的格式
    send方法的参数就是post方式发送给服务器的数据。(和get不同)
    
    var xhr = new XMLHttpRequest();
    xhr.open('POST', '/query-post');
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send('name=zhangsan&age=18');
    xhr.onload = function () {
        console.log(this.responseText)
    }
    

    ajax第二天

    json

    JSON的本质是字符串。
    数据类型   
    null:    null                //1.JSON 中不能有单行或多行注释           
    number:  1995                //2.JSON 没有 undefined 这个值
    boolean: true				//3.一个完整的JSON,不能有其他内容掺杂
    string:  "hello"    //4.JSON 中表述字符串(==值)必须使用双引号==
    array:   ["zhangsan", "lisi", "wangwu"]  
    object{                     //5.JSON 中属性名称==必须用双引号==包裹
       "name": "zce",
        "age": 18,
        "gender": true,
        "girl_friend": null,
        "arr": []
    }
    数据转换
    JS = JSON.parse(JSON)        //JSON 格式转JS数据
    JSON = JSON.stringify(JS);  //js转JSON
    

    ajax第三天

    同步与异步

    Ajax 即“==A==synchronous ==J==avascript ==A==nd ==X==ML”(异步 JavaScript 和 XML)
    xhr.open('GET', '/time', true);
    xhr.open() 方法第三个参数要求传入的是一个 boolean 值
    默认为 true,表示异步操作,同步执行可以通过传递 false 实现
    
    // 同步方式
    xhr.open('GET', '/time', false)
    // // 同步方式 执行需要 先注册事件再调用 send,否则 onload 事件无法触发
     xhr.onload = function () {
         // 会按代码执行顺序执行这行代码
         console.log('ajax')
    }
    xhr.send(null);
    

    XHR对象的其他API

    readyState  //xhr.readyState 会得到 0、1、2、3、4几个数字
    

    readyState 状态描述 说明
    0 UNSENT 代理(XHR)被创建,但尚未调用 open() 方法。
    1 OPENED open() 方法已经被调用,建立了连接。
    2 HEADERS_RECEIVED send() 方法已经被调用,并且已经可以获取状态行和响应头。
    3 LOADING 响应体(服务器返回的数据)下载中, responseText 属性可能已经包含部分数据。
    4 DONE 响应体(服务器返回的数据)下载完成,可以直接使用 responseText或response 获取完整的结果。

    onreadystatechange

    onload是H5之后新增的事件,在H5之前,都是使用onreadystatechange。
    当Ajax状态发生变化的时候,就会触发这个事件。
    
    xhr.onreadystatechange = function () {
        console.log(this.readyState); 
        // 输出1/2/3/4
    }
    xhr对象分块接收数据,当xhr对象接收的数据发生变化,一直到接收完毕,这里readyState的值不会发生变化,一直为3,但接收到的数据变化了,也表示ajax的状态变化了,此时也会触发onreadystatechange事件。
    - onload -- 当readyState等于4的时候触发
    - onprogress -- 当readyState等于3的时候触发(数据正在返回途中的时候触发)progress -- 过程、进度
    - onloadstart() -- 当开始发送请求的时候触发  //主要用于提示
    - onloadend() -- 当请求响应过程结束的时候触发  //主要用于提示
    

    responseType

    responseType,表示预期服务器返回的数据的类型,当设置了该属性后,通过 response 接收数据的时候,会根据该属性的值来自动处理结果为JS能够识别的数据。
    比如,当设置了 responseType='json'  后,使用 response 来接收服务器返回的数据时,会自动处理 JSON 数据为 JS 数据,免去了 JSON.parse() 这一步。
    
    responseType的可选值为下面几个:
    
    - “”  -- 空,表示文本,和text一样。空为默认值
    - text -- 文本
    - ==json== -- JSON格式数据
    - document -- 文档对象。当服务器返回的结果是XML类型的时候,需要指定为document
    

    API小结

    - XHR 1 版 API (IE5和IE6也可以使用的API)
      - open
      - send
      - readyState
      - onreadystatechange
      - responseText
    - XHR 2.0 新增API
      - onload
      - onprogress
      - onloadstart
      - onloadend
      - response
      - responseType
    

    H5新增FormData对象(重点)

    方法一(有form表单)
    <form id="fm">
          <input type="text" name="user"><br>
          <input type="password" name="pwd"><br>
          <input type="radio" name="sex" value="男" checked>男
          <input type="radio" name="sex" value="女">女<br>
          <input type="file" name="pic"><br/>
          <input type="button" id="btn" value="提交">
      </form>
      
      <script>
          // 点击按钮的时候,收集表单中的数据,并发送给服务器
          document.getElementById('btn').onclick = function () {
              // 使用FormData步骤1:找到表单DOM对象
              var fm = document.getElementById('fm');
              // 使用FormData步骤2:创建FormData对象,并传递表单
              var fd = new FormData(fm);
      
              // 发送ajax请求到服务器
              var xhr = new XMLHttpRequest();
              xhr.open('POST', '/fd'); // 接口fd,收到提交的数据后,会返回收到的数据
              // 使用FormData收集表单数据的时候,Content-Type不用设置
              // xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
              xhr.send(fd);
              xhr.onload = function () {
                  console.log(this.response);
              };
          };
      </script>
      
      方法二(没有form表单)
      <input type="text" id="user"><br>
      <input type="password" id="pwd"><br>
      <input type="file" id="pic"><br/>
      <input type="button" id="btn" value="提交">
      
      <script>
          // 点击按钮的时候,将表单中的数据发送给 /fd 接口
          document.getElementById('btn').onclick = function () {
      
              // 获取表单各项的值,没有form标签
              // 1. 实例化FormData
              var fd = new FormData();
              // 2. 调用fd对象的append方法,向fd对象中,追加数据即可
              // fd.append('key', 'value');
              fd.append('username', document.getElementById('user').value);
              fd.append('pwd', document.getElementById('pwd').value);
              // 如果是文件域的话,则需要添加文件对象
              // console.dir(document.getElementById('pic'));
              // 找文件对象 :  文件域DOM对象.files[0]
              fd.append('pic', document.getElementById('pic').files[0]);
      
              var xhr = new XMLHttpRequest();
              xhr.open('POST', '/fd');
              xhr.responseType = 'json';
              xhr.send(fd);
              xhr.onload = function () {
                  console.log(this.response);
              }
          }
      </script>
    

    创建XHR对象的兼容方案(了解)

    IE5/ie6浏览器中,没有内置 XMLHttpRequest 对象。 解决方案:
    var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP')
    // xhr 的成员相同,即后续的open、send方法一样使用、onreadystatechange也可以使用
    // 但是h5新增的 response、onprogress、onloadstart、onload、responseType不能使用的
    

    获取参数

    req.query.id //获取的是url中参数id的值
    ajax是GET请求方式,传递的id最后就会拼接到url上,   /admin/cate/delete?id=1
    req.body 是body-parser处理过的结果,获取的是POST方式提交的数据,即请求体
    req.query 确切的说,获取的是url上的参数,GET请求方式,参数就在url上
  • 相关阅读:
    Block为什么使用Copy?
    iOS运行时,如何增加成员变量
    安卓长按交互onCreateContextMenu的简单 用法
    iOS 检查版本号的代码
    git的基本使用
    svn的使用
    const 关键字及作用
    常见的内存分配
    保存字符串的方法
    指针的总结一(指针的定义)
  • 原文地址:https://www.cnblogs.com/bgd150809324/p/11390902.html
Copyright © 2020-2023  润新知