1. AJAX

异步JavaScript + XML,用于浏览器内部通过前端JavaScript语言操纵,与HTTP服务器进行连接通信的技术。

2. XMLHttpRequest对象

从IE7+,以及当前流行的Chrome,Firefox,Safri,Opera浏览器,提供用于AJAX操作的对象,均为XMLHttpRequest.

var xmlhttp = XMLHttpRequest();

3. 前端处理流程

流程包括以下几个步骤:

  1. 创建XMLHttpRequest对象;
  2. 注册onreadystatechange处理函数(用于异步操作,同步操作不需要注册该函数)
  3. 调用open(请求方法,请求url地址,是否为异步:true异步)

    1. 如果是get|GET,那么建议在调用open之前,把请求url地址构造好,对传递的name=value,其中name和value必须是encodeURIComponent函数返回后的值。
    2. 如果是post|POST,那么可以在调用send方法的时候,传递post数据
  4. 如果是post方法,则需要给发生给HTTP服务器的请求头部增加一个字段:xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
  5. 然后调用send方法,该方法接受一个参数,有name=value&name=value组成的长字符串,其中name,value都是经过encodeURIComponent()函数处理后端值,get请求的数据不在这里提供,直接在open方法的url内提供,此时传递给send的为null参数值。

4. 接收数据

异步的AJAX请求,处理数据的流程,都存在于onreadystatechange处理函数内,首先xhr对象存在有以下几个属性:

  • readyState属性:是一个int整数值,存在以下5个值,每当这个值发生变化,都会触发一次onreadystatechange事件,即:调用注册在该事件上的函数。

    • 0:只是创建了xhr, 没有调用open,没有调用send
    • 1:调用了open,没有调用send
    • 2:调用了send,还没有接收到数据
    • 3:接收到了数据,数据还不全
    • 4:接收到了全部数据,请求处理完成。
  • status属性:HTTP响应头部状态码,比如:200响应成功,对应的statusText值为OK,是一个 int 正数值。
  • statusText属性:HTTP响应头状态名,
  • responseText属性:响应返回的主体部分内容,类型为字符串,格式为Text。
  • responseXML属性:响应返回的主体部分内容,类型为字符串,格式为XML,

5. 示例

/* get */
function testGet() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var myElement = document.getElementById('mydiv');
myElement.innerHTML = xmlhttp.responseText;
}
}; var url = "/my/ajax/url" + "?" + encodeURIComponent('name') + "=" + encodeURIComponent("Tim") + "&" + encodeURIComponent('sex') + "=" + encodeURIComponent('male');
xmlhttp.open('get', url, true);
xmlhttp.send(null);
} /* post */
function testPost() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var myElement = document.getElementById('mydiv');
myElement.innerHTML = xmlhttp.responseText;
}
}; xmlhttp.open('post', '/my/ajax/url', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
var dataStr = encodeURIComponent('name') + “=” + encodeURIComponent('Tim') + '&' + encodeURIComponent('sex') + "=" + encodeURIComponent('male');
xmlhttp.send(dataStr);
}

[TimLinux] JavaScript 原生AJAX介绍的更多相关文章

  1. JavaScript原生Ajax请求纯文本数据

    源代码 ajax1.html: <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...

  2. javascript原生ajax;

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. javascript原生ajax请求

    class Ajax{ constructor(url, method, data, callback_suc, callback_err, callback_run){ this.RT = true ...

  4. JavaScript的原生Ajax解析

    通过JavaScript的Ajax进行详细的解析过程,从而更好的了解Jquery的Ajax. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百 ...

  5. JS原生ajax与Jquery插件ajax深入学习

    序言: 近来随着项目的上线实施,稍微有点空闲,闲暇之时偶然发现之前写的关于javascript原生xmlHttpRequest ajax方法以及后来jquery插件ajax方法,于是就行了一些总结,因 ...

  6. javascript实现原生ajax的几种方法介绍

    自从javascript有了各种框架之后,比如jquery,使用ajax已经变的相当简单了.但有时候为了追求简洁,可能项目中不需要加载jquery这种庞大的js插件.但又要使用到ajax这种功能该如何 ...

  7. 用javascript写原生ajax(笔记)

    AJAX  的全名叫做  Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).它最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并 ...

  8. 原生 JavaScript 实现 AJAX、JSONP

    相信大多数前端开发者在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的 ...

  9. javascript实现原生ajax

    自从javascript有了各种框架之后,比如jquery,使用ajax已经变的相当简单了.但有时候为了追求简洁,可能项目中不需要加载jquery这种庞大的js插件.但又要使用到ajax这种功能该如何 ...

随机推荐

  1. 痞子衡嵌入式:串行EEPROM接口事实标准及SPI EEPROM简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是EEPROM接口标准及SPI EEPROM. 痞子衡之前写过一篇文章 <SLC Parallel NOR简介>,介绍过并行N ...

  2. ReentrantLock 如何实现非公平锁?和公平锁实现有什么区别

    reentrant 英[riːˈɛntrənt] 美[ˌriˈɛntrənt] 先学会读.单词原意是可重入的 考察显示锁的使用.可延伸知识点 独占锁 & 共享锁 独占锁 - 悲观锁(不能同时被 ...

  3. Node 入门

    Node 入门 NodeJs 安装,HelloWorld 下载地址 https://nodejs.org/zh-cn/ https://nodejs.org/dist/ 用 Node命令行输出Hell ...

  4. rsync同步基本用法

                                                                                                        ...

  5. oracle实现"limit"功能

    转载于http://blog.sina.com.cn/s/blog_67e2758d0100s3oc.html oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结 ...

  6. C. Present(二分 + 扫描线)

    题目链接:http://codeforces.com/contest/460/problem/C 题意: n盆花,浇k次水, 每次可使花高度 + 1, 每次可浇相邻的w盆,ai 表示 i-th盆花 的 ...

  7. Ubuntu 16.04 更改apt源

    1 修改apt源配置文件,把/etc/apt/sources.list替换为以下内容: sudo gedit /etc/apt/sources.list deb http://mirrors.aliy ...

  8. windows版的mysql主从复制环境搭建

    背景 最近在学习用Spring Aop来实现数据库读写分离的功能. 在编写代码之前,首先是要部署好mysql的环境,因为要实现读写分离,所以至少需要部署两个mysql实例,一主一从,并且主从实例之间能 ...

  9. (六)OpenStack---M版---双节点搭建---Neutron安装和配置

    ↓↓↓↓↓↓↓↓视频已上线B站↓↓↓↓↓↓↓↓ >>>>>>传送门 1.创建网络服务数据库 2.获得 admin 凭证来获取只有管理员能执行的命令的访问权限 3.创 ...

  10. K8s 集群节点在线率达到 99.9% 以上,扩容效率提升 50%,我们做了这 3 个深度改造

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 张振(守辰) ...