浅谈AJAX的基本原理和原生AJAX的基础用法
一、什么是AJAX?
AJAX,即“Asynchronous Javascript And XML”,翻译为异步的JavaScript和XML,是一种创建交互式网页应用的网页开发技术。2001年,Goolge公司为Google浏览器新加了“Google Suggest”功能,不同于传统网页,用户可以在浏览网页的同时,从服务器端获取更新后的搜索建议。Goolge将其命名为AJAX,它的目标就是实现在无刷新、无提交的情况下,页面内容进行局部更新。简简单单一句话就能概括的目标,实现的效果却非常棒!大家都知道,传统页面向服务器发起请求后,到客户端接收到响应消息的这段时间是白白浪费的,只能等到接收完响应才能继续运行。而这十分影响用户的体验以及网页加载效率。
因此,基于同步请求如此大的弊端,Google开始研究这方面的优化问题,能否找到一个方法,在服务器执行客户端请求时,浏览器依旧工作。终于Google在浏览器底层找到了一个XMLHttpRequest对象能向服务器发起异步请求(Goolge就是厉害呀~~),这是一个各大浏览器创建时底层都已写好的一个对象。通过它就可以在客户端向服务器发起异步请求,说到底其实就是利用js向服务器发起请求,而不是传统意义上的表单提交或者URL后加问号键值对跳转。
二、原生AJAX用法
聊完了AJAX的来源和定义,我们再来简单的聊一聊它的原生代码。
1、获取XHR对象
首先,你的把它写在js中(这不是废话吗),通过new的方法来获取一个xhr对象(即XMLHttpRequest对象)。
即 var xhr = new XMLHttpRequest();
一般来说,AJAX都是用在事件中,毕竟无端端的浏览器干嘛去发起请求,一定是用户有了需求,触发了事件。即便是异步请求初始化的网页,也是存在加载事件onload的。
2、XHR对象的常用属性
(1)、readyState
表示XHR的当前状态,即请求-响应过程进行到了哪一步。取值有5个:
0——(默认值)UNSENT,请求消息尚未发出;
1——OPENED,XHR和服务器之间的连接已打开;
2——HEADERS_RECEIVED,XHR已经接收到了响应消息的头部,也就意味着既然响应头已经接收到了,响应起始行也早就接收完毕。
3——LOADING,XHR正在加载响应主体,正如它的单词是一个进行时,在这个状态下的响应主体是不断加载的,并未加载完成。
4——DONE,XHR接收完毕响应消息。
这是XHR至关重要的一个属性,它的值只能依次递增,不能跳着加,也不能后退。它根据响应过程的变化,自动改变值,不允许手工赋值。可以通过它知道你的请求消息是否成功发出。
(2)、status
默认值为0,响应消息状态码,只有当xhr.readyState的值变为2时值才会变化。因为只有当xhr.readyState的值走到2时,才会接受到响应起始行。
(3)、statusText
默认为空,响应起始行中的原因短句,也只有当xhr.readyState变为2时才有值。
(4)、responseText
默认为空,响应消息的主体内容,当xhr.readyState的值变为3时开始有值,到4时稳定下来。这是XHR里一个很重要属性。客户端接收到自服务器传回的“结果”全在这个属性值里。
3、XHR的常用方法
(1)、open()
打开到服务器的连接。具体用法为xhr.open(method,url,isAsyn);
method即请求方法(常用的是"POST"、"GET"),url即请求服务器文件的路径,isAsyn(是否异步)现在统一默认只写true。
(2)、send()
发送请求消息。具体用法:看你的请求方法中是否包含请求主体,如包含则其中参数填入请求主体内容,不然则写null。
(3)、setRequestHeader()
设置请求消息头部。具体用法:setRequestHeader(name,value),name即请求头中的属性名,value则是它的值。
(4)、getResponseHeader()
获取响应消息头部。它就一个参数,name,即你想获得的响应头中的属性名。
(5)、getAllResponseHeaders()
获取所有响应头,没有参数。
4、使用XHR发起异步请求的步骤 
5、XHR能接受到的五种响应
(1)、text/plain
接收到的普通的文本信息。客户端可以根据接收到的文本内容的不同,做出不同操作。
(2)、text/html
接收到的由HTML标签组成的片段。可加入页面中。
(3)、application/javascript
以PHP为例,在PHP解释器眼中,js代码只是一段普通字符串。而当这段字符串被客户端接收后,必须调用全局函数eval()才能正常使用。
(4)、application/xml
其实在2005年出现JSON后,在前端领域,XML已经被完全替代了。因为它和JSON比起来,实在太过于繁琐,关于XML的具体用法,我就不在这详谈。只需要知道一点,W3C DOM标准三大组成部分,核心DOM、HTML DOM和这最后的XML DOM。
(5)、application/json
JSON终于出现了,同样是从服务器端批量传递复合数据回客户端,但它使用简单,易于阅读且高效。它的全名叫:JavaScript Object Notation(js对象标记),本质是一种轻量级的字符串数据格式。由[]或者{}括起来,要么是一个数组,要么是一个对象。对象中可以包含多个键值对,每个键及每个值必须用""引起来。
三、结语
AJAX本质上并不是一个很难的东西,只是可能它的涉及知识面有些广,是一个对HTML、CSS、JavaScript、HTTP协议的综合应用(这里我们先不谈服务器端)。只要你对这四个方面都有一定的了解和理解,特别是当配合上JQuery时,用起来十分简单。
这是我第一次写博客,虽然是一篇短短的随笔,但内心特别激动。有人可能不太熟悉HTTP协议以及XML,那看的会有些吃力,以后关于这俩个方面我也会写一些自己的心得体会。
浅谈AJAX的基本原理和原生AJAX的基础用法的更多相关文章
- 框架----Django之Ajax全套实例(原生AJAX,jQuery Ajax,“伪”AJAX,JSONP,CORS)
一.原生AJAX,jQuery Ajax,“伪”AJAX,JSONP 1. 浏览器访问 http://127.0.0.1:8000/index/ http://127.0.0.1:8000/fake_ ...
- 浅谈Redis的基本原理和数据类型结构的特性和应用开发场景
一.Redis介绍 1,redis介绍(Redis安装在磁盘:Redis数据存储在内存) redis是一种基于键值对(key-value)数据库,其中value可以为string.hash.list. ...
- 关于AJAX跨域和原生AJAX CORS跨域解决
项目需求要在别人的域名下调用自己的接口,因为浏览器的同源策略是不允许不同域名下之间的信息交换,那就意味着要跨域处理 参考博客 :https://blog.csdn.net/Ulricalin/arti ...
- 浅谈轮播图(原生JavaScript实现)
现在各种轮播图插件,玲琅满目,用起来也非常方便,通常只需要选择元素然后传入参数就可以了.但是,和授人以鱼不如授人以渔一样的道理,不管怎样最基本的轮播图原理还是应当掌握的.这样不仅有利于我们自己写出来满 ...
- php+ajax无刷新分页原生ajax实现分页最简单完整实例-完整代码,
展示页面:index.html <html><script> function ajax_show() { // 获取当前页 var page =1; var xhr = ne ...
- ajax和原生ajax、文件的上传
ajax理解: ajax发送的请求是异步处理的.也就是说如下形式: function f1(){ $.ajax( { ....... success:function(){ a= return a } ...
- 使用原生ajax及其简单封装
原生ajax配置详解 // 原生ajax // 1. 创建ajax对象 if(window.XMLHttpRequest){ // // IE7+, Firefox, Chrome, Opera, S ...
- 阿里P7浅谈SpringMVC
一.前言 既然是浅谈 SpringMVC,那么我们就先从基础说起,本章节主要讲解以下内容: 1.三层结构介绍 2.MVC 设计模式介绍 3.SpringMVC 介绍 4.入门程序的实现 注:介绍方面的 ...
- 浅谈JS之AJAX
0x00:什么是Ajax? Ajax是Asynchronous Javascript And Xml 的缩写(异步javascript及xml),Ajax是使用javascript在浏览器后台操作HT ...
随机推荐
- winform最小化后隐藏到右下角,单击或双击后恢复 .
01.//先拖一个notifyIcon控件进来 02. 03.//然后在您的notifyIcon控件中添加 MouseDoubleClick事件,代码如下 04. 05. private void n ...
- 在MVC3中修改KindEditor实现图片删除
编辑器KindEditor可以上传图片,但却不能删除图片,因此我们通过修改一些文件,对KindEditor进行扩展,使得KindEditor能删除服务器上的图片. 主要方法就是:在图片空间中浏览图片, ...
- Avada主题通过自定义CSS全局更换微软雅黑字体
Avada主题的菜单.正文.标题.面包屑路径等等如果想更换为“微软雅黑”中文字体,只需要进入Avada主题的选项,倒数第二项有个Custom CSS,把下面的代码粘贴进去即可.当然你也可以自行改变字体 ...
- 【转】给npm设置代理
可以运行如下两句命令设置代理,注意代理的地址改为自己实际可用的代理. npm config set proxy=http://127.0.0.1:8087 npm config set registr ...
- [BS-29] 给UIView添加背景图片
给UIView添加背景图片 //默认情况下只能设置UIView的背景颜色,不能给UIView设置背景图片,但通过绘图知识可以做到 - (void)drawRect:(CGRect)rect { [su ...
- python 安装easy_install和pip
做个记录 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安装easy_install 下载地址:https://pypi.python.org/ ...
- tesseract ocr文字识别Android实例程序和训练工具全部源代码
tesseract ocr是一个开源的文字识别引擎,Android系统中也可以使用.可以识别50多种语言,通过自己训练识别库的方式,可以大大提高识别的准确率. 为了节省大家的学习时间,现将自己近期的学 ...
- MVC4中重复使用JQuery Mobile Dialog的做法实践.
第一步:建立mobile项目类型 第二步:添加针对对话框的的DialogController.cs: 建立这个Controller的目的是此Dlg可以反复使用,把它做成一个固定界面,其他的Contro ...
- 从零开始学Linux[二]:常用操作:用户组、进程、网络、ssh
摘要:Linux基础学习:创建用户组和用户.软件包管理.磁盘管理.进程管理.前后台进程的切换.网络配置.浏览网页.远程登录ssh 第一节,主要介绍一些简单命令,这节介绍一些日常操作. 1.创建用户组和 ...
- ios检测是否有网络
/** AFNetworkReachabilityStatusUnknown = -1, // 未知 AFNetworkReachabilityStatusNotReachable ...