Ajax(Asynchronous JavaScript and XML)

这种技术就是无须刷新页面即可从服务器中取得数据,但不一定是XML数据。在原生方法上,Ajax技术的核心是XMLHttpRequest对象(简称XHR)。


XHR用法

  • open(method, url, isAsync)

    开启一个method类型的请求,url是相对于当前页面(也可以是绝对路径),open方法并不会真正发送请求,而只是启动一个请求已备发送。

  • send(data)

    接收作为请求主体发送的数据,如果不需要必须传入null,因为这个参数对有些浏览器是必要的。调用send后请求就会被分派到服务器。

  • XHR的属性

    在发送请求收到响应后,响应的数据会自动填充XHR对象的属性:

    • responseText:作为响应主体被返回的文本

    • responseXML:如果响应的内容类型是”text/xml“或”application/xml“,这个属性中将保存包含着相应数据的XML DOM文档。

    • status:响应的HTTP状态

    • statusText:HTTP状态的说明

    • readyState:表示请求/响应过程中的当前活动阶段,只要这个值发生变化都会触发一次readystatechange事件,因此可以利用这个事件监听异步请求后的响应结果是否可用。(=0表示尚未调用open;=1表示已调用open但没调用send;=2表示已调用send但未收到响应;=3表示已接收到部分数据;=4收到全部响应并且数据可用)

      let xhr = new XMLHttpRequest();
      xhr.onreadystatechange = function(){ //在open前指定并用DOM0级保证浏览器兼容
      if(xhr.readyState == 4){
      if((xhr.status >=200 && xhr.status < 300) || xhr.status == 304){
      console.log(xhr.responseText);
      console.log(xhr.response);
      }else{
      alert('request was unsuccessful:' + xhr.status);
      }
      }
      }
      xhr.open("GET", "http://127.0.0.1:3011", true);
      xhr.send(null);
    • abort:取消异步请求,会停止触发事件,不再允许访问任何与响应有关的对象属性(若访问可能会出错,最好将访问的语句放在try...catch语句中),并在终止请求后对XHR对象进行解引用操作。

HTTP头部信息

  • setRequestHeader(name, value) 自定义请求头部信息,在open之后send之前调用。
  • getResponseHeader(name) 取得相应的响应头部信息
  • getAllResponseHeaders() 取得一个包含所有头部信息的长字符串

GET请求

常用于向服务器查询某些信息,将查询的字符串追加到URL末尾以便将查询条件发给服务器(?name1=value1&name2=value2...)。

特别注意查询信息中的name和value值都必须使用encodeURIComponent()进行编码才能放到URL的末尾。

发送信息有限,因为URL有长度限制。

POST请求

常用于向服务器发送应该被保存的数据,POST请求主体可以包含非常多的数据,而且格式不限。

通过设置Content-Type头部信息表明发送的数据类型,规定数据的编码方式。

  • application/x-www-form-urlencoded;charset=utf-8

    表单形式的内容类型,body中的数据会以key=values的形式进行序列化,而这个编码的过程中,一些特殊符号会通过URL转码转成如4%D3%3F。。。等形式

  • application/json;charset=utf-8

    请求体里面显示的内容是一个标准的json串,而不会像经过URL转码后的数据那样

发送同样的数据,GET请求比POST快(GET有缓存,POST在真正接受数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据)。


XMLHttpRequest2级

对XHR的进一步发展

FormData

序列化表单对象,使用FormData的方便之处体现在不比明确在XHR对象上设置请求头,XHR对象能够识别传入的数据类型是FormData的实例并配置适当的头部信息。

let data1 = new FormData(document.form[0]);  //接收表单元素,预先填入键值对

let data = new FormData();
data.append('name', 'simple') //用append方法添加键值对

timeout

xhr对象的timeout属性表示请求在等待响应多少毫秒后终止,并触发ontimeout事件。设置为0表示不设置超时。

xhr.timeout = 1000; //1s
xhr.ontimeout = function(){
alert("Request did not return in a second.");
}

overrideMimeType(‘dataType’)

用于重写从服务器返回的响应MIME的类型

进度

  • xhr.onprogress 在接收响应期间不断触发,其事件对象event的target属性指向xhr对象,并且包含了三个属性:

    • lengthComputable:表示进度信息可否用的布尔值
    • position: 表示已经接收的字节数
    • totalSize: 表示根据Content-Length响应头部确定的预期字节数

    因此有以上的属性,可以创建一个等待响应的进度指示器了

    xhr.onprogress = function(event){
    var divStatus = document.getElementById("status");
    if(event.lengthComputable){
    divStatus.innerHTML = "Received " + event.position + "of" + event.totalSize + " bytes.";
    }
    }
  • xhr.upload.onprogress 监听POST请求体上传进度

    • event.loaded 已经发送的字节数
    • event.total 数据体总的字节数

其他类型的HTTP请求

  • HEAD 获取资源的头部

    和GET方法一样,只是不返回报文主体部分。资源网站 -> 资源服务器里面(查看是否有重复的资源/更新日期,是否存在请求的资源/URI有效性)
  • CONNECT 隧道通讯

    客户端 -> 服务端之间的数据通讯会建立一个通道进行传输,也就是加密 (SSL)

    https 其实就是披SSL外皮的http
  • PUT 发送文件

    类似FTP 的文件上传,不带验证机制因此存在安全性问题, REST架构设计才有可能使用
  • DELECT 删除文件,PUT相反的方法,同样不带验证机制存在安全隐患问题。
  • OPTIONS 询问请求,服务返回支持的请求类型 (GET,POST,HEAD)

前端知识点回顾之重点篇——AJAX的更多相关文章

  1. 前端知识点回顾之重点篇——CORS

    CORS(cross origin resource sharing)跨域资源共享 来源:http://www.ruanyifeng.com/blog/2016/04/cors.html 它允许浏览器 ...

  2. 前端知识点回顾之重点篇——ES6的Promise对象

    Promise Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异 ...

  3. 前端知识点回顾之重点篇——JavaScript异步机制

    JavaScript异步机制 来源:https://www.cnblogs.com/zhaodongyu/p/3922961.html JavaScript是单线程异步执行的,单线程意味着代码在任务队 ...

  4. 前端知识点回顾之重点篇——CSS中vertical align属性

    来源:https://www.cnblogs.com/shuiyi/p/5597187.html 行框的概念 红色(line-height)为行框的顶部和底部,绿色(font-size)为字体的高度, ...

  5. 前端知识点回顾之重点篇——CSS中flex布局

    flex布局 来源: http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool 采用 Flex 布局的元素 ...

  6. 前端知识点回顾之重点篇——jQuery实现的原理

    jQuery jQuery的实现原理 参考:https://blog.csdn.net/zhouziyu2011/article/details/70256659 外层沙箱和命名空间$ 为了避免声明了 ...

  7. 前端知识点回顾之重点篇——ES6的async函数和module

    async函数 ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是 Generator 函数的语法糖 什么是语法糖? 意指那些没有给计算机语言添加新功能,而只是 ...

  8. 前端知识点回顾之重点篇——ES6的Iterator和Generator

    Iterator 迭代器是一种接口.是一种机制. 为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员). Iter ...

  9. 前端知识点回顾之重点篇——CSS中的BFC

    BFC布局(Block Formatting Contexts) 来源:https://www.cnblogs.com/lzbk/p/6057097.html 块级格式化上下文是页面中的一块渲染区域, ...

随机推荐

  1. 关于操作git

    手册:http://www.yiibai.com/git/ 一.安装git,可以通过git bash执行命令行:安装tortoiseGit执行git相关操作,在那之前需要了解下git命令行操作 二.在 ...

  2. SQL学习——BETWEEN运算符

    原文链接 BETWEEN的作用 BETWEEN 操作符用于选取介于两个值之间的数据范围内的值. BETWEEN的边界 BETWEEN运算符选择给定范围内的值.值可以是数字,文本或日期. BETWEEN ...

  3. @ComponentScan注解及其XML配置

    开发中会经常使用包扫描,只要标注了@Controller.@Service.@Repository,@Component 注解的类会自动加入到容器中,ComponentScan有注解和xml配置两种方 ...

  4. Oracle权限管理详解(2)

    详见:https://blog.csdn.net/u013412772/article/details/52733050 Oracle数据库推荐以引用博客: http: http:.html http ...

  5. 【转】Delphi货币类型转中文大写金额

    unit TU2.Helper.Currency; interface ): string; ): string; implementation uses System.SysUtils, Syste ...

  6. sklearn--模型的评价

    sklearn.metrics 1.MSE(均方误差)和RMSE(均方根误差),以及score() lr.score(test_x,test_y)#越接近1越好,负的很差 from sklearn.m ...

  7. AtCoder Beginner Contest 132 F Small Products

    Small Products 思路: 整除分块+dp 打表发现,按整除分块后转移方向如下图所示,上面的块的前缀转移到下面的块 代码: #pragma GCC optimize(2) #pragma G ...

  8. Python单例模式(Singleton)的N种实现

    很多初学者喜欢用全局变量,因为这比函数的参数传来传去更容易让人理解.确实在很多场景下用全局变量很方便.不过如果代码规模增大,并且有多个文件的时候,全局变量就会变得比较混乱.你可能不知道在哪个文件中定义 ...

  9. 少有人知的 GitHub 使用技巧

    GitHub 大家常上吧?可是使用 GitHub 的各种小窍门你就不一定知道了.本文将各种使用 GitHub 的小窍门分享给大家. diff时忽略空格 有些修改只是增减了空格,在URL中添加?w=1就 ...

  10. hmmlearn 安装笔记

    hmmlearn是在python上实现隐马可夫模型的一个组件包,原先是在sklearn中的,后来被弃用而单独分离出来. 首先安装sklearn,最好下载setup.py的安装包用命令行安装,因为安装h ...