前言

在学习js的过程,我个人对于Ajax这项技术有着很深的印象,大概是因为它在我们网页开发过程中常见的交互里所发挥的作用太过于关键了吧,所以我想在这里好好地谈一些自己对它的理解。

概念理解

Ajax英文全称为Asynchronous JavaScript and XML,意思就是异步JS和XML;那么既然讲到异步,我在这里要说明一下同步和异步现象。

同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待卡死状态。

异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都可以随意做其他事情,不会被卡死。

那么可以理解为异步是相对于同步来说的,同步即同时进行(累积多了就排队,一个一个执行,必须等上一个结束,才能到下一个),而异步就是执行到我了,我去旁边继续执行等结果,后面排队的继续不用等我结果出来再执行。

技术特点

AJAX 是一种用于创建快速动态网页的技术,对网页的某部分进行更新,不用刷新整个网页。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。而我之前所用过的诸如servlet+javabean在实现前后端交互时,如果需要更新内容,必需重载整个网页面。所以可以看出使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息。

工作原理

简单来说工作原理是通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。这相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给Ajax引擎自己来做,,只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。下面我引用一张图来体现Ajax所实现的浏览器和服务器之间的数据交互:

核心机制

XMLHttpRequest是ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。

下面我通过表格来展示XMLHttpRequest这个对象的属性和方法:

属性

说明
 readyState

表示XMLHtpRequest对象的状态:

0: 未初始化。对象已创建,未调用open;

1: open方法成功调用,但Sendf方法未调用;

2: send方法已经调用,尚未开始接受数据;

3:正在接受数据。Http响应头信息已经接受,但尚未接收完成;

4:完成,即响应数据接受完成。

 Onreadystatechange

请求状态改变的事件触发器(readyState 变化时会调用这个属性上注册的javascript函数)。

 responseText  服务器响应的文本内容
 responseXML  服务器响应的XML内容对应的DOM对象
 Status

服务器返回的http状态码。200表示“成功”,404表示“未找到”,500表示“服务器内部错误”等。

 statusText  服务器返回状态的文本信息
方法

说明

 Open(string method,string url,boolean asynch,string username,string password)

指定和服务器端交互的HTTP方法,URL地址,即其他请求信息;

Method:表示http请求方法,一般 使用"GET","POST";

url:表示请求的服务器的地址;

asynch:表示是否采用异步方法,true为异步,false为同步;

username和password分别表示用户名和密码,提供http认证机制需要的用户名和密码。

 Send(content)

向服务器发出请求,如果采用异步方式,该方法会立即返回。

SetRequestHeader(String header,String Value)  

设置HTTP请求中的指定头部header的值为value;

此方法需在open方法以后调用,一般在post方式中使用。

 getAllResponseHeaders()

返回包含Http的所有响应头信息,其中相应头包括Content-length,date,url等内容。

 getResponseHeader(String header)  返回HTTP响应头中指定的键名header对应的值
  Abort() 

停止当前http请求。对应的XMLHttpRequest对象会复位到未初始化的状态。

下面展示一个简单的打开与服务器的连接(open方法):

var xhr = new XMLHTTPRequest();

xhr.open("method", "url", "async");

xhr.send(null);

xhr.onreadystatechange = function(){

if(xhr.readystate == 4){

   if(xhr.status == 200){

     console.log(xhr.responseText)

   }

  }
}

常见使用流程

1.添加XMLHttpRequest对象。

2.打开与服务器的连接(open方法)。

3.发送请求(send方法)。

4.接收服务器响应。

5.if 发送POST请求。

总结

Ajax技术对于用户体验极佳,用户不需要刷新页面就能获取可更新的数据,也不需要插件支持,它的运用能够提升 Web 程序的性能,并减轻服务器和带宽的负担。但它也使得前进、后退的功能被破坏,因为 Ajax 永远在当前页,不会记录前后页面。并且我了解到在进行Ajax开发时,网络延迟——即用户发出请求到服务器发出响应之间的间隔——需要慎重考虑。如果不给予用户明确的回应,没有恰当的预读数据,或者对XMLHttpRequest的不恰当处理,都会使用户感到厌烦。

对Ajax的一些理解的更多相关文章

  1. 【jQuery】$.ajax() 常用参数理解

    参考:http://hemin.cn/jq/jQuery.ajax.html注意,所有的选项都可以通过$.ajaxSetup()函数来全局设置.个人理解全局设置,在每次调用$.ajax()时都会执行 ...

  2. JQuery(三)-- AJAX的深入理解以及JQuery的使用

    HTTP HTTP http: 超文本传输协议.特点:  简单.快速.灵活.无状态.无连接 URL: 统一资源定位符. 组成:协议名://主机IP:端口号/项目资源地址?传递参数的键值对#锚点 ①ip ...

  3. $.ajax() 方法的理解

    jquery中的ajax方法理解,AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术.AJAX ...

  4. accp8.0转换教材第10章Ajax和jQuery理解与练习

    C/S (Client/Server)结构,即大家熟知的客户机和服务器结构. B/S(Browser/Server)结构即浏览器和服务器结构. 认识ajax .XMLHttpRequest.使用jqu ...

  5. ajax异步的加深理解

    过去印象中的ajax的异步操作,一直还居然在$.ajax函数内部的异步,真是大错特错,实际的异步操作,是针对整个js文件来的. 今天总算意识到了,实际情况如下: $(function(){ //[弹框 ...

  6. ajax步骤和理解

    步骤: 1.利用html+css来实现页面,表达信息: 2.用XMLHttpRequest和web服务器进行数据的异步交换 3.运营js操作DOM,实现动态局部刷新: XMLHttpRequest对象 ...

  7. 有关ajax的理解;

    jQuery是JavaScript封装的一个库,里面封装了一些便于我们使用的方法,同时还有$.ajax()的一些理解需要我们更加深入了解 ajax简介: 实现后台与前台交互的功能或方法就叫做ajax: ...

  8. 简单理解jQuery中$.getJSON、$.get、$.post、$.ajax用法

    在WEB开发中异步请求方式普遍使用,ajax技术减少程序员的工作量,也提升用户交互体验.AJAX的四种异步请求方式都能实现基本需求,闲话不多说,直接切入正题. 1.$.getJSON $.getJSO ...

  9. 使用Jquery的Ajax实现无刷新更新,修改,删除页面

    本文将向大家讲述一下最近工作的一些总结,主要包括了以下内容,注册界面以及详细信息界面的编辑.主要是介绍了AJAX技术,因为我觉得其他方面没什么好介绍的.首先是跟大家说一下Ajax的优点,假如你删除了一 ...

随机推荐

  1. IIC挂死问题解决过程

    0.环境:arm CPU 带有IIC控制器作为slave端,带有调试串口. 1.bug表现:IIC slave 在系统启动后概率挂死,导致master无法detect到slave. 猜测1:认为IIC ...

  2. 【坑】关于使用 maven 创建 web 项目以后,el 表达式不被识别的解决方法

    问题描述: 在学习 Ajax 的时候,使用资源路径,博主本着不要硬编码,局使用 el 表达式进行读取项目名,然后发现 el 表达式没有被识别,而是当做字符串 ${pageContext.request ...

  3. 数位dp踩坑

    前言 数位DP是什么?以前总觉得这个概念很高大上,最近闲的没事,学了一下发现确实挺神奇的. 从一道简单题说起 hdu 2089 "不要62" 一个数字,如果包含'4'或者'62', ...

  4. 关于c++模板非类型参数中指针和引用类型必须为全局或者静态变量的问题

    之前在学习c++模板的时候,一直没留意到在非类型参数中对指针和引用有着一些限制,今早在复学模板的时候才注意到书上标明,指针和引用作为模板的非类型参数传递时必须要求是全局或者静态变量.其实不难想到,模板 ...

  5. windons下一些软件的地址

    idea http://download.jetbrains.8686c.com/idea/ideaIC-2018.3.1.exe

  6. TIM—基本定时器代码

    使用目的:使用TIM定时器让小灯每0.5秒翻转一次亮灭 编程过程: 1-配置时基初始化结构体 2-开启定时器更新中断(即定时时间到了) 3-配置中断优先级 4-使能定时器 5-编写中断服务函数 6-编 ...

  7. hdu 6205 card card card 尺取法

    card card card Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. moment.js(日期处理类库)的使用

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

  9. stm32 窗口看门狗 WWDG

    窗口看门狗WWDG其实和独立看门狗类似,它是一个7位递减计数器不断的往下递减计数,当减到一个固定值0x40时还不喂狗的话,产生一个MCU复位,这个值叫窗口的下限,是固定的值,不能改变 窗口看门狗(WW ...

  10. 【大数据】SmallFile-Analysis-Script

    1.root账号先在namenode节点上配置一个定时任务,将fsimage定时传到其他客户机上进行操作 whereis hadoop命令确定安装目录,然后去配置文件找到namenode节点(data ...