原生JavaScript下的Ajax
概述
AJAX即asynchronous javascript and XML,中文翻译是异步的javascript和XML。是指一种创建交互式网页应用、用于创建快速动态网页的开发技术。
传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面。
而AJAX通过在后台与服务器进行少量数据交换,可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
ajax包括以下几步骤:
1、创建AJAX对象
2、发出HTTP请求
3、接收服务器传回的数据
4、更新网页数据
概括起来,就是一句话,ajax通过原生的XMLHttpRequest对象发出HTTP请求,得到服务器返回的数据后,再进行处理.
尽管名称如此,XMLHttpRequest 也可以用于获取任何类型的数据,而不仅仅是XML,它甚至支持HTTP以外的协议(包括 file:// 和 FTP)。
XMLHttpRequest对象创建和使用
创建
XMLHttpRequest对象是AJAX的核心技术,这是由微软首先引入的一个特性。
IE5是第一款引入XHR对象的浏览器。
在IE5中,XHR对象是通过MSXML库中的一个ActiveX对象实现的,而IE7+及其他标准浏览器都支持原生的XHR对象
var xhr;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject('Microsoft.XMLHTTP');
}
初始化请求
创建好之后使用open方法初始化一个请求
open(method: string, url: string): void;
open(method: string, url: string, async: boolean, username?: string | null, password?: string | null): void;
参数
method- 要使用的HTTP方法,比如「GET」、「POST」、「PUT」、「DELETE」、等。对于非HTTP(S) URL被忽略。
url- 该URL相对于执行代码的当前页面,且只能向同一个域中使用相同端口和协议的URL发送请求。如果URL与启动请求的页面有任何差别,都会引发安全错误
async可选- 一个可选的布尔参数,默认为
true,表示要不要异步执行操作。如果值为false,send()方法直到收到答复前不会返回。如果true,已完成事务的通知可供事件监听器使用。如果multipart属性为true则这个必须为true,否则将引发异常。 user可选- 可选的用户名用于认证用途;默认为
null。 password可选- 可选的密码用于认证用途,默认为
null。
发送请求
发送请求使用的是send方法
send(body?: Document | BodyInit | null): void;
如果是异步请求(默认为异步请求),则此方法会在请求发送后立即返回;如果是同步请求,则此方法直到响应到达后才会返回
1.GET方法,send()方法无参数,或参数为null;
2.POST方法,send()方法的参数为要发送的数据( Blob | BufferSource | FormData | URLSearchParams | ReadableStream<Uint8Array> | string)一般为FormData.
注:没有设置头部信息的话,会默认发送带有 "* / *" 的Accept 头部。
接收响应
上边几个步骤设置完以后就可以接收服务器响应回来的数据
一个完整的HTTP响应由状态码、响应头集合和响应主体组成。在收到响应后,这些都可以通过XHR对象的属性和方法使用
属性有
responseText 作为响应主体被返回的文本(文本形式),如果请求未成功或尚未发送,则返回 null。
responseXML 返回一个 Document,如果响应的内容类型是'text/xml'或'application/xml',这个属性中将保存着响应数据的XML DOM文档,如果请求未成功、尚未发送或时不能被解析为 XML 或 HTML,则返回 null。
status 代表请求的响应状态
readyState 代表请求的状态码
在接收到响应后,第一步是检查status属性,以确定响应已经成功返回。
一般来说,可以将HTTP状态码为200作为成功的标志。
此时,responseText属性的内容已经就绪,而且在内容类型正确的情况下,responseXML也可以访问了。
此外,状态码为304表示请求的资源并没有被修改,可以直接使用浏览器中缓存的版本;当然,也意味着响应是有效的
无论内容类型是什么,响应主体的内容都会保存到responseText属性中,而对于非XML数据而言,responseXML属性的值将为null
xhr.onreadystatechange = function () {
if((xhr.status >=200 && xhr.status < 300) || xhr.status == 304){
console.log(xhr.responseText);
}else{
alert('request was unsuccessful:' + xhr.status);
}
if (xhr.readyState === 4) {
if (xhr.status == 200) {
console.log(xhr.responseText);
}
}
}
这里要注意一下超时的问题
超时
XHR对象的timeout属性等于一个整数,表示多少毫秒后,如果请求仍然没有得到结果,就会自动终止。该属性默认等于0,表示没有时间限制
如果请求超时,将触发ontimeout事件需要在send之后状态码改变之前使用
xhr.ontimeout = function () {
console.log('The request timed out.');
}
xhr.timeout = 1000;
[注意]IE8-浏览器不支持该属性
最后
AJAX本身并不难,主要的就是有一部分内容涉及到网络方面的知识,所以导致学起来有一定的难度。
[注意]如果要建立N个不同的请求,就要使用N个不同的XHR对象。当然可以重用已存在的XHR对象,但这会终止之前通过该对象挂起的任何请求
HTTP协议有一个天生的缺陷:通信只能由客户端发起,因此HTTP协议做不到服务器主动向客户端推送信息
原生JavaScript下的Ajax的更多相关文章
- 原生javaScript中使用Ajax实现异步通信
AJAX本质就是在HTTP协议的基础上以异步的方式与服务器进行通信,所谓异步,就是指某段程序执行时不会阻塞其它程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序,相反则为同步. 以下开始简单 ...
- 原生javascript包装一个ajax方法
调用AJAX 1 <script type="text/javascript" src="ajax.js"></script> 2 &l ...
- 纯原生javascript下拉框表单美化实例教程
html的表单有很强大的功能,在web早期的时候,表单是页面向服务器发起通信的主要渠道.但有些表单元素的样式没办法通过添加css样式来达到满意的效果,而且不同的浏览器之间设置的样式还存在兼容问题,比如 ...
- Ajax--Ajax基于原生javascript:创建Ajax对象、链接服务器、发送请求、接受响应结果
Ajax概述 异步:指某段程序执行时不会阻塞其它程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序,相反则为同步. 同步请求: 请求是由浏览器发送 页面会刷新 异步请求: 请求是由浏览器的一 ...
- C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法
C#构造方法(函数) 一.概括 1.通常创建一个对象的方法如图: 通过 Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...
- 原生javaScript完成Ajax请求
使用原生javaScript完成Ajax请求,首先应该创建一个对象XMLHttprequest,考虑到兼容低版本IE浏览器,使用ActiveXObject对象,代码入下: var request; i ...
- 2、.net NVelocity中原生javascript ajax封装使用
在页面上,我们经常会遇到局部刷新的例子,这个时候,就需要用到ajax, 因为很多代码都是公用的,所以我们想到了,将代码封装,简化了使用,减少了冗余 javascript ajax代码如下: var x ...
- 原生 JavaScript 实现 AJAX、JSONP
相信大多数前端开发者在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的 ...
- 原生JavaScript写AJAX
前端JavaScript: function ajaxGet(url, obj) { var request; if(window.XMLHttpRequest) { request = new XM ...
随机推荐
- 如何单独卸载office2016中的one note
- Oracle 11g 静默安装过程(centos7)
开启机器,本次实例分配的ip是:192.168.3.197(Xshell ssh连接) 2 安装unzip 工具.vim编辑器(个人习惯,vi也可以) 3 在/etc/hosts文件中添加本机IP跟主 ...
- Nginx笔记:对url中携带的参数进行多次判断
Nginx中只支持简单的if语句,不支持多条件判断和嵌套,通过特殊的方式也可以达到效果 location / { proxy_set_header Host $host; proxy_set_head ...
- http、https的压测工具——apacheab 、webbench
http的压测工具 搞清楚不同的安装方法,执行文件.配置文件的路径. yum安装: 执行文件在/usr/bin 下,一般为执行文件 配置文件在/etc目录下 conf文件 源码安装: 执行文件在安装文 ...
- 使用 Commitizen 撰写 Angular 规范的 commit message
本文为原创文章,转载请标明出处 目录 安装及配置 使用 1. 安装及配置 npm install -g commitizen npm install -g cz-conventional-change ...
- virtualenv 个人指南
virtualenv是解决一个机器上多个应用需要的Python版本不一致的问题,virtualenv就是用来为一个应用创建一套"隔离"的Python运行环境,解决了解决了不同应用间 ...
- 2019-04-18-NFV基础概念
NFV技术的起源和概念 在移动互联网时代,运营商面临内外困局.就自身而言,采用的流量增长-网络扩容-收入增长的商业模型正在失效,庞大.僵化的电信基础网络,不能够满足用户的丰富需求:就竞争对手而言,互联 ...
- oppo互联网招聘-各类软件测试
一.服务端测试专家 关键词:安全测试.白盒测试.性能测试.自动化.持续集成.服务端 岗位职责: 主导多个高日活产品的测试方案: 试点和推广自动化和持续集成: 改善测试相关流程和规范. 职位要求: 计算 ...
- swift中的闭包总结
闭包是功能性自包含模块,可以在代码中被传递和使用. Swift 中的闭包与 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似. 闭包的基本语法 闭包表达式语 ...
- Python——13定制类
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...