浅谈AJAX的基本原理和原生AJAX的基础用法

时间:2021-10-13 21:33:49

一、什么是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发起异步请求的步骤  浅谈AJAX的基本原理和原生AJAX的基础用法

  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的基础用法的更多相关文章

  1. 框架----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_ ...

  2. 浅谈Redis的基本原理和数据类型结构的特性和应用开发场景

    一.Redis介绍 1,redis介绍(Redis安装在磁盘:Redis数据存储在内存) redis是一种基于键值对(key-value)数据库,其中value可以为string.hash.list. ...

  3. 关于AJAX跨域和原生AJAX CORS跨域解决

    项目需求要在别人的域名下调用自己的接口,因为浏览器的同源策略是不允许不同域名下之间的信息交换,那就意味着要跨域处理 参考博客 :https://blog.csdn.net/Ulricalin/arti ...

  4. 浅谈轮播图(原生JavaScript实现)

    现在各种轮播图插件,玲琅满目,用起来也非常方便,通常只需要选择元素然后传入参数就可以了.但是,和授人以鱼不如授人以渔一样的道理,不管怎样最基本的轮播图原理还是应当掌握的.这样不仅有利于我们自己写出来满 ...

  5. php+ajax无刷新分页原生ajax实现分页最简单完整实例-完整代码,

    展示页面:index.html <html><script> function ajax_show() { // 获取当前页 var page =1; var xhr = ne ...

  6. ajax和原生ajax、文件的上传

    ajax理解: ajax发送的请求是异步处理的.也就是说如下形式: function f1(){ $.ajax( { ....... success:function(){ a= return a } ...

  7. 使用原生ajax及其简单封装

    原生ajax配置详解 // 原生ajax // 1. 创建ajax对象 if(window.XMLHttpRequest){ // // IE7+, Firefox, Chrome, Opera, S ...

  8. 阿里P7浅谈SpringMVC

    一.前言 既然是浅谈 SpringMVC,那么我们就先从基础说起,本章节主要讲解以下内容: 1.三层结构介绍 2.MVC 设计模式介绍 3.SpringMVC 介绍 4.入门程序的实现 注:介绍方面的 ...

  9. 浅谈JS之AJAX

    0x00:什么是Ajax? Ajax是Asynchronous Javascript And Xml 的缩写(异步javascript及xml),Ajax是使用javascript在浏览器后台操作HT ...

随机推荐

  1. C&num; 调用C&plus;&plus; SDK&sol;API的问题总结

    1.回调函数的使用 c++的回调函数如下所示: typedef void (CALLBACK *Data)(long lHandle, DATA_TYPE eDataType, unsigned ch ...

  2. testng&plus;reportng&comma;运行xml

    在看了http://seleniumcn.cn/read.php?tid=7960视频的Reportng后自己实验了下, 1.下载reportng-1.1.4.zip,解压后如下,把reportng- ...

  3. java中static作用详解

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何 ...

  4. redis状态与性能监控

    Redis介绍 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表.哈希.集合和有序集合5种.支持在服务器端计算集合 ...

  5. flash与php 交互(as传参给php)

    一种 不传参 直接读取PHP文件 btn.addEventListener(MouseEvent.CLICK,loadTxt);function loadTxt(evt:MouseEvent):voi ...

  6. SQL实现递归及存储过程中In&lpar;&rpar;参数传递解决方案&lbrack;转&rsqb;

    SQL实现递归及存储过程中In()参数传递解决方案   1.SQL递归 在SQL Server中,我们可以利用表表达式来实现递归算法,一般用于阻止机构的加载及相关性处理.   -->实现: 假设 ...

  7. Swift - 表格图片加载优化(拖动表格时不加载,停止时只加载当前页图片)

    列表的单元格中包含有图片在开发中很常见.通常我们可以直接在tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIn ...

  8. Linux下安装PostgreSQL 转载linux社区

    Linux下安装PostgreSQL [日期:2016-12-25] 来源:Linux社区  作者:xiaojian [字体:大 中 小]   在Linux下安装PostgreSQL有二进制格式安装和 ...

  9. 浅谈React

    浅谈react react是什么?其官网给出了明确定义:A JavaScript library for building user interfaces,一个用于构建用户界面的JavaScript库 ...

  10. Hybrid小程序混合开发之路 - 数据交互

    HTML+CSS是历史悠久.超高*度.控制精准.表现能力极强.编码简单.学习门槛超低.真跨平台的一种UI界面开发方式. 本文介绍的是微信小程序和H5混合开发的一种数据交互方式. 很多应用在原生界面中 ...