[TimLinux] JavaScript 原生AJAX介绍
1. AJAX
异步JavaScript + XML,用于浏览器内部通过前端JavaScript语言操纵,与HTTP服务器进行连接通信的技术。
2. XMLHttpRequest对象
从IE7+,以及当前流行的Chrome,Firefox,Safri,Opera浏览器,提供用于AJAX操作的对象,均为XMLHttpRequest.
var xmlhttp = XMLHttpRequest();
3. 前端处理流程
流程包括以下几个步骤:
- 创建XMLHttpRequest对象;
- 注册onreadystatechange处理函数(用于异步操作,同步操作不需要注册该函数)
- 如果是get|GET,那么建议在调用open之前,把请求url地址构造好,对传递的name=value,其中name和value必须是encodeURIComponent函数返回后的值。
- 如果是post|POST,那么可以在调用send方法的时候,传递post数据
- 如果是post方法,则需要给发生给HTTP服务器的请求头部增加一个字段:xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
- 然后调用send方法,该方法接受一个参数,有name=value&name=value组成的长字符串,其中name,value都是经过encodeURIComponent()函数处理后端值,get请求的数据不在这里提供,直接在open方法的url内提供,此时传递给send的为null参数值。
调用open(请求方法,请求url地址,是否为异步:true异步)
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介绍的更多相关文章
- JavaScript原生Ajax请求纯文本数据
源代码 ajax1.html: <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...
- javascript原生ajax;
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript原生ajax请求
class Ajax{ constructor(url, method, data, callback_suc, callback_err, callback_run){ this.RT = true ...
- JavaScript的原生Ajax解析
通过JavaScript的Ajax进行详细的解析过程,从而更好的了解Jquery的Ajax. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百 ...
- JS原生ajax与Jquery插件ajax深入学习
序言: 近来随着项目的上线实施,稍微有点空闲,闲暇之时偶然发现之前写的关于javascript原生xmlHttpRequest ajax方法以及后来jquery插件ajax方法,于是就行了一些总结,因 ...
- javascript实现原生ajax的几种方法介绍
自从javascript有了各种框架之后,比如jquery,使用ajax已经变的相当简单了.但有时候为了追求简洁,可能项目中不需要加载jquery这种庞大的js插件.但又要使用到ajax这种功能该如何 ...
- 用javascript写原生ajax(笔记)
AJAX 的全名叫做 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).它最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并 ...
- 原生 JavaScript 实现 AJAX、JSONP
相信大多数前端开发者在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的 ...
- javascript实现原生ajax
自从javascript有了各种框架之后,比如jquery,使用ajax已经变的相当简单了.但有时候为了追求简洁,可能项目中不需要加载jquery这种庞大的js插件.但又要使用到ajax这种功能该如何 ...
随机推荐
- win7设置docker默认服务端地址
目录 win7设置docker默认服务端地址 1.开启docker远程访问 2.本地调整 2.1 docker.exe重命名 2.2 添加docker.bat 2.3 添加快速切换功能 3.使用验证 ...
- VueRouter爬坑第一篇-简单实践
VueRouter系列的文章示例编写时,项目是使用vue-cli脚手架搭建. 项目搭建的步骤和项目目录专门写了一篇文章:点击这里进行传送 后续VueRouter系列的文章的示例编写均基于该项目环境. ...
- Linux命令实践( 六)
1.统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来 [root@test ~]#awk -F: '{shells[$NF]++;if($ ...
- getClass()和instanceof以及类的equals方法
在比较两个类时,常见有两种做法,一种是x.getClass() == y; 一种是x instanceof y,下面我们来比较这两种做法的区别. getClass()返回一个对象所属的类 public ...
- markdown文档
标题 #加空格# 加粗 *加粗* 斜体 **斜体** 斜体加粗 ***斜体加粗*** 删除线 ~~删除线~~~ 引用 >引用 分割线 --- 超链接[题目](网址) 列表 -加空格 列表内容 ...
- [LC]35题 Search Insert Position (搜索插入位置)
①英文题目 Given a sorted array and a target value, return the index if the target is found. If not, retu ...
- Maven系列第8篇:你的maven项目构建太慢了,我实在看不下去,带你一起磨刀!!多数使用maven的人都经常想要的一种功能,但是大多数人都不知道如何使用!!!
maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能. 这是maven系列第8篇. 整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部 ...
- lqb 基础练习 01字串 (itoa)
基础练习 01字串 时间限制:1.0s 内存限制:256.0MB 问题描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能.它们的前几个是: 00000 00001 0 ...
- nyoj 63-小猴子下落 (模拟)
63-小猴子下落 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:2 submit:5 题目描述: 有一颗二叉树,最大深度为D,且所有叶子的深度都相同 ...
- (三)初识NumPy(数据CSV文件存取和多维数据的存取)
本章主要介绍的是数据的CSV文件存取和多维数据的存取. 一.数据的CSV文件存取 1.CSV的写文件: np.savetxt(frame, array, fmt='%.18e', delimiter= ...