AJAX (Asynchronous JavaScript and XML(异步的 JavaScript 和 XML))。

平时工作中使用ajax的频率挺高的,这里整理了一些ajax相关的小知识,后续还会继续补充学习到的内容。为了自己能够更好的掌握和使用。

简言

1 ajax最大的优点就是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。使网页实现异步更新。

2 使用脚本操纵HTTP和WEB服务器进行数据交换,不会导致页面重载。

原生ajax

虽然原生的ajax现在用的可能不多,但还是有必要懂的。

  • 1 XMLHttpRequest

浏览器在XMLHttpRequest类上定义了它们的HTTP API。这个类的每个实例都表示一个独立的请求/响应对,并且这个对象的属性和方法允许制定请求细节和提取响应数据。

  • 2 一个HTTP请求由4部分组成

    • HTTP 请求方法或者动作
    • 正在请求的URL
    • 一个可选的请求头集合,其中可能包括身份验证信息。
    • 一个可选的请求主体。
  • 3 服务器返回的HTTP响应包含3部分
    • 一个数字和文本组成的状态码,用来显示请求的成功和失败。
    • 一个响应头集合
    • 响应主体
  • 4 方法
    • open()方法 - 与服务器端建立连接
    • send()方法 - 向服务器端发送请求
    • setRequestHeader() - 设置请求头信息
  • 5 事件
    • onreadystatechange事件

      作用 - 监听服务器端的通信状态

      触发 - 服务器端的通信状态变化时
  • 6 属性
    • readyState属性 - 获取服务器端的通信状态
    • status属性 - 获取服务器端的状态码
    • responseText属性 - 返回服务器端响应的文本格式数据
    • responseXML属性 - 返回服务器端响应的XML格式数据
请求步骤
1 实例化XMLHttpRequest对象
    var request = new XMLHttpRequest();

老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象:

    new ActiveXObject("Microsoft.XMLHTTP");

处理ie低版本兼容性问题

    function getXMLHttpRequest(){
let xhr = null;//声明变量
if(window.XMLHttpRequest){// 其他浏览器
xhr = new XMLHttpRequest();
}else{// IE浏览器
xhr = new ActiveXObject("Microsoft.XMLHttp");
}
return xhr;
}
2 指定请求

创建XMLHttpRequest对象之后,发起Http请求的下一步是调用XMLHttpRequest对象的open()方法去指定这个请求的两个必须部分:方法和url

    request.open("GET", //http  get请求
"data.csv"); // URL的内容

open()的第一个参数可以是:get post head put等

  • get 和 post

    1 get用于常规请求,适用于当URL完全指定请求资源,当请求对服务器没有任何副作用以及当服务器的响应是可缓存的。

    2 post 常用于html表单,它在请求主体中包含额外数据且这些数据常存储到服务器上的数据库中。相同URL的重复post请求从服务器得到的响应可能不同,同时不应该缓存使用这个方法的请求。

    简言之,post方法有自己的特点:

    无法使用缓存文件(更新服务器上的文件或数据库)

    向服务器发送大量数据(POST 没有数据量限制)

    发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

  • 如果有请求头的话,请求进程的下个步骤是设置它。例如post请求需要“Content-Type”头指定请求主题的MIME类型。

    request.setRequestHeader("Content-Type","text/plain");
  • 发起HTTP 请求的最后一步是指定可选的请求主体并向服务器发送它。
    request.send(null);

如果是get请求则没有请求主体,所以可以传参数null,但是post通常需要请求主体,并且它应该匹配使用setRequestHeader指定的"Content-Type"头。

小栗子

    function postMessage(msg) {
var request = new XMLHttpRequest();
request.open("POST","/test.php");
request.setRequestHeader("Content-Type","text/plain","charset=utf-8");
request.send(msg);
}
3 取得响应

一个完整的HTTP响应由状态码、响应头集合和响应主体组成。通过XMLHttpRequest对象的属性和方法可以获得。

  • readyState属性 指定了HTTP请求的状态。

    0 - 请求未初始化

    1 - (与服务器端)正在连接

    2 - 请求正在接收

    3 - 请求正在响应

    4 - 请求响应完毕

  • status和statusText属性以数字和文本的形式返回HTTP状态码。例如:200和“ok”表示成功请求,404和"not found" 表示url不能匹配服务器上的任何资源。

  • 服务器常用的状态码及其对应的含义如下:

    200:服务器响应正常。

    304:该资源在上次请求之后没有任何修改(这通常用于浏览器的缓存机制,使用GET请求时尤其需要注意)。

    400:无法找到请求的资源。

    401:访问资源的权限不够。

    403:没有权限访问资源。

    404:需要访问的资源不存在。

    405:需要访问的资源被禁止。

    407:访问的资源需要代理身份验证。

    414:请求的URL太长。

    500:服务器内部错误。

  • 如需获得来自服务器的响应,可使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。

    小栗子

    function getText(url,callback) {
let request = new XMLHttpRequest();
request.open("get",url);
request.onreadystatechange = function() {
//如果请求完成并且请求成功
if (request.readyState === 4 && request.status === 200) {
let type = request.getResponseHeader("Content-Type");
if (type.match(/^text/)) {
callback(request.responseText);
}
}
}
request.send(null);
}

jQuery - AJAX

jQuery - AJAX经过对原生js的封装,使用和理解起来就简单的多了,关于jQuery - AJAX的参考资料很多,这里写个小栗子温习一下。

    $.ajax({url:"http://testurl.com",success:function(res){
let data = res.data;
return data;
}});
    //load() 方法从服务器加载数据,并把返回的数据放入被选元素中。
$(selector).load(URL,data,callback);
//必需的 URL 参数规定您希望加载的 URL。
//可选的 data 参数规定与请求一同发送的查询字符串键/值对集合。
//可选的 callback 参数是 load() 方法完成后所执行的函数名称。

Axios

axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征:

  • 从浏览器中创建 XMLHttpRequest

  • 从 node.js 发出 http 请求

  • 支持 Promise API

  • 拦截请求和响应

  • 转换请求和响应数据

  • 取消请求

  • 自动转换JSON数据

  • 客户端支持防止 CSRF/XSRF (跨站请求伪造)

    安装方法(3种):

    $ npm install axios
    $ bower install axios
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

参考地址:

https://www.npmjs.com/package/axios

http://www.tuicool.com/articles/eMb2yuY

具体axios相关会在以后继续总结和整理,这里举个工作中用过的小栗子

    import axios from 'axios';
import qs from 'qs'; //使用qs库对数据进行编码 const ajax = (url, type = 'get', data) => {
return axios({
method: type,
url: url,
data: data ? qs.stringify(data) : null,
headers: {
'Content-Type': 'application/x-www-form-urlencoded' // 表单数据格式正式的MIME类型
}
});
} export default ajax;

AJAX 相关笔记的更多相关文章

  1. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  2. HTTPS证书申请相关笔记

    申请免费的HTTPS证书相关资料 参考资料: HTTPS 检测 苹果ATS检测 什么是ECC证书? 渠道2: Let's Encrypt 优点 缺点 Let's Encrypt 的是否支持非80,44 ...

  3. JNI相关笔记 [TOC]

    JNI相关笔记 目录 JNI相关笔记 1 生成native code所需要的头文件 2 JNI提供的一些函数和方法 3 局部引用,全局引用,全局弱引用. 4 异常 1 生成native code所需要 ...

  4. 基于PHP的AJAX学习笔记(教程)

    本文转载自:http://www.softeng.cn/?p=107 这是本人在学习ajax过程所做的笔记,通过本笔记的学习,可以完成ajax的快速入门.本笔记前端分别使用原生态的javascript ...

  5. Ajax学习笔记(二)

    二.prototype库具体解释 1.prototype库的使用 //导入下载好的prototype.js文件 <script type="text/javascript" ...

  6. AJAX学习笔记(一)基础知识

    一.HTTP协议 1.HTTP: 计算机通过网络进行通讯的规则,用于浏览器向服务器发送请求. 2.HTTP是一种无状态的协议,无状态是指服务器端不保留任何连接相关的信息,浏览器客户端向服务器发送请求, ...

  7. SSM框架中的注解,配置和控制器相关笔记

    常规SSM实例 探索SSM理论的前提,应该是在对框架基础的运作方式有一定了解,以下是个人Android后台项目,用SSM框架快速搭建,以下是代码,主要 观察结构. 代码结构: model实体类 Ida ...

  8. AJAX学习笔记2:XHR实现跨域资源共享(CORS)以及和JSONP的对比----转载

    1 前言: 首先对参考文章作者表示感谢,你们的经验总结给我们这些新手提供了太多资源.本文致力于解决AJAX的CORS问题,我在逻辑上进行了梳理:首先,系统的总结了CORS问题的起源-同源策略:其次,介 ...

  9. js常见知识点1.ajax相关

    一. javascript中的typeof返回哪些数据类型? 建议回复: typeof 运算符把类型信息当作字符串返回.typeof 返回值有六种可能: number, string, boolean ...

随机推荐

  1. Vue 的 createElement 函数的参数问题的小笔记

    官方文档的说明. 第二个参数的值是要生成的标签的属性数据.点击查看详情. 第三个参数则是组件标签内的数据,数据里面的内容会渲染在第一个参数的标签内.通常会在此指定各插槽 slot 对应的位置,也可以在 ...

  2. C++访问WebService gSoap方式

    一.             gSOAP访问WebService 1.      下载gSOAP gSOAP 2.7.17 版下载地址http://sourceforge.net/projects/g ...

  3. android开发者要懂得问题答案

    我在网上看了一下有些人在博客上提出一些什么android开发者必须懂得问题,可是就是没有答案,所以我就把这些问题拷贝过来了.顺便也把全部的答案加上,为了让很多其它的开发者高速的找到答案,谢谢! 以下的 ...

  4. 内网使用 IPV6 之 TunnelBroker隧道(6in4)篇

    内网使用 IPV6 之 TunnelBroker隧道(6in4)篇 据非专业网民推测 tunnelbroker isatap 和 6to4  貌似都需要公网,但有网民测试这位大作的方法可行.特别之处是 ...

  5. 89.hash算法实现CSDN密码处理

    初始化,数据的行数,hash链表结构体,存储头结点 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdl ...

  6. Node.js笔记 请求方式 GET

    三种方法解析url 1. 传统的字符串split切割方法 2. querystring     只能解析数据部分,不能解析前面 index.html之类的地址部分. 3. url   可以解析地址和数 ...

  7. import 与export详解

    ES6 1.export default 其他模块加载该模块时,import命令可以为该匿名函数指定任意名字. 如: import Vue from 'vue' vue里面的第三方模块都是用了这个 使 ...

  8. Redis的高级应用-安全性和主从复制

    Redis的服务器命令和键值命令(String,Hash,List,Set,Zset)相对简单,只需查看文档即可. 文档地址: http://www.runoob.com/redis/redis-tu ...

  9. Java Web学习总结(14)——JSP基础语法

    任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. 一.JSP模版元素 JSP页面中的HTML内容称之 ...

  10. amazeui学习笔记--css(常用组件14)--缩略图Thumbnail

    amazeui学习笔记--css(常用组件14)--缩略图Thumbnail 一.总结 1.基本样式:在 <img> 添加 .am-thumbnail 类:也可以在 <img> ...