面试之ajax原理(转载)

总结1

总结2

AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术,

是几种原有技术的结合体。它由下列技术组合而成。

   1.使用CSS和XHTML来表示。

   2. 使用DOM模型来交互和动态显示。

   3.使用XMLHttpRequest来和服务器进行异步通信。

   4.使用javascript来绑定和调用。

Ajax的原理简单

Ajax的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给Ajax引擎自己来做, 只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。

Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。

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

  所以我们先从XMLHttpRequest讲起,来看看它的工作原理。

  首先,我们先来看看XMLHttpRequest这个对象的属性。

  它的属性有:

  onreadystatechange  每次状态改变所触发事件的事件处理程序。

  responseText     从服务器进程返回数据的字符串形式。

  responseXML    从服务器进程返回的DOM兼容的文档数据对象。

  status           从服务器返回的数字代码,比如常见的404(未找到)和200(已就绪)

  status Text       伴随状态码的字符串信息

  readyState       对象状态值

0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)

1 (初始化) 对象已建立,尚未调用send方法

2 (发送数据) send方法已调用,但是当前的状态及http头未知

3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,

4 (完成) 数据接收完毕,此时可以通过通过responseXml和responseText获取完整的回应数据

ajax的优点

   Ajax的给我们带来的好处大家基本上都深有体会,在这里我只简单的讲几点:

   1、最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好。

  2、使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。

  3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。

  4、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。

8、ajax的缺点

  下面我着重讲一讲ajax的缺陷,因为平时我们大多注意的都是ajax给我们所带来的好处诸如用户体验的提升。而对ajax所带来的缺陷有所忽视。

  下面所阐述的ajax的缺陷都是它先天所产生的。

   1、ajax干掉了back按钮,即对浏览器后退机制的破坏。后退按钮是一个标准的web站点的重要功能,但是它没法和js进行很好的合作。这是ajax所带来的一个比较严重的问题,因为用户往往是希望能够通过后退来取消前一次操作的。那么对于这个问题有没有办法?答案是肯定的,用过Gmail的知道,Gmail下面采用的ajax技术解决了这个问题,在Gmail下面是可以后退的,但是,它也并不能改变ajax的机制,它只是采用的一个比较笨但是有效的办法,即用户单击后退按钮访问历史记录时,通过创建或使用一个隐藏的IFRAME来重现页面上的变更。(例如,当用户在Google Maps中单击后退时,它在一个隐藏的IFRAME中进行搜索,然后将搜索结果反映到Ajax元素上,以便将应用程序状态恢复到当时的状态。)

但是,虽然说这个问题是可以解决的,但是它所带来的开发成本是非常高的,和ajax框架所要求的快速开发是相背离的。这是ajax所带来的一个非常严重的问题。

 2、安全问题

技术同时也对IT企业带来了新的安全威胁,ajax技术就如同对企业数据建立了一个直接通道。这使得开发者在不经意间会暴露比以前更多的数据和服务器逻辑。ajax的逻辑可以对客户端的安全扫描技术隐藏起来,允许黑客从远端服务器上建立新的攻击。还有ajax也难以避免一些已知的安全弱点,诸如跨站点脚步攻击、SQL注入攻击和基于credentials的安全漏洞等。

  3、对搜索引擎的支持比较弱。

  4、破坏了程序的异常机制。至少从目前看来,像ajax.dll,ajaxpro.dll这些ajax框架是会破坏程序的异常机制的。关于这个问题,我曾经在开发过程中遇到过,但是查了一下网上几乎没有相关的介绍。后来我自己做了一次试验,分别采用ajax和传统的form提交的模式来删除一条数据……给我们的调试带来了很大的困难。

 

转载于:https://www.cnblogs.com/yhf286/p/4878351.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优化方案电子版_关于小区分支道路整修设计方案的讨论稿(No.2020121)

各位业主,大家好! 关于绿洲比华利花园主干道翻新和次干道整修前期勘查和设计方案,经业委会及小区专家小组、设计单位申都设计公司工程设计人员结合本小区的实际情况进行了深入讨论,优化设计,形成如下三个独立方案&…

OSGI和Spring动态模块–简单的Hello World

在此姿势中,我们将采用使用OSGi进行的第一个实现,并使用Spring Dynamic Modules改进应用程序。 Spring动态模块(Spring Dm)使基于OSGi的应用程序的开发更加容易。 这样,服务的部署就容易得多。 您可以像其他任何Spring…

C语言代码规范(五)函数参数个数

一个函数的参数的数目过多(尤其是超过8个)显然是一种不可取的编程风格。参数的数目直接影响调用函数的速度,参数越多,调用函数越慢。 参数的数目少,程序就显得精练、简洁,这有助于检查和发现程序中的错误。…

vijos P1740 聪明的质检员

题目链接:传送门 题目大意:给你n个物品,每件物品有重量 W 和价值 V,给m个区间,和一个标准值。(n,m最大200000) 要求找到一个值x,使得m个所有区间的权值和与标准值的差的绝对值最小。单个区间权值计算公式(数目num0,价值…

为什么有的开关电源需要加自举电容?

一、什么是自举电路? 1.1 自举的概念 首先,自举电路也叫升压电路,是利用自举升压二极管,自举升压电容等电子元件,使电容放电电压和电源电压叠加,从而使电压升高。有的电路升高的电压能达到数倍电源电压。…

VS2010报错 error:LINK1123:转换到COF期间失败,文件无限或损坏

右键工程-配置属性-清单工具-输入和输出,嵌入清单一项重新选择为否,如下图 修改后重新生成和运行,发现程序正常运行了。

springboot 整合mybatis_SpringBoot整合Mybatis、MybatisPuls

文末视频讲解SpringBoot的版本是2.2.0一、整合Mybatis1-1、引入pom文件<dependency> <groupId>mysqlgroupId> <artifactId>mysql-connector-javaartifactId> <version>8.0.19version> dependency> <dependency> &l…

iOS 开发中遇到的问题

1. 关于纠结很久的KVO崩溃问题&#xff0c;其真正原因是&#xff0c;在删除roomItem的KVO之前,将这个对象已经赋值为nil,所以实际上并没有删除他的observer&#xff0c;因此而崩溃&#xff1b;长时间纠结的原因是受.cxx_destruct影响了思路 2.拷贝block 因为block变量默认是声明…

为旧版代码创建存根–测试技术6

任何阅读此博客的人都可能已经意识到&#xff0c;目前我正在开发一个包含大量旧代码的项目&#xff0c;这些旧代码庞大&#xff0c;扩展且编写时从未进行过任何测试。 在使用此遗留代码时&#xff0c;有一个行为异常的类非常普遍&#xff0c;整个团队都一次又一次地犯错。 为了…

C学习杂记(一)常见误会

一、sizeof是关键字&#xff0c;不是函数。 二、strlen是函数。

python性能解决_我们如何发现并解决Python代码中性能下降的问题

Python部落(python.freelycode.com)组织翻译&#xff0c;禁止转载&#xff0c;欢迎转发。 作者&#xff1a;Omer Lachish 最近&#xff0c;我们已经开始使用RQ库代替Celery库作为我们的任务运行引擎。第一阶段&#xff0c;我们只迁移了那些不直接进行查询工作的任务。这些任务包…

easyui $.parser.parse 页面重新渲染

一些dom元素是动态拼接上的easui的样式&#xff0c;由于页面已经渲染过了&#xff0c;所以需要手动执行渲染某个部件或者整个页面 $.parser.parse(); // parse all the page $.parser.parse(#cc); // parse the specified node $.parser.parse($("#grid").parent());…

Java EE6装饰器:在注入时装饰类

软件中常见的设计模式是装饰器模式 。 我们上一堂课&#xff0c;然后在它周围包装另一堂课。 这样&#xff0c;当我们调用类时&#xff0c;我们总是在到达内部类之前经过周围的类。 Java EE 6允许我们通过CDI创建装饰器&#xff0c;作为其AOP功能的一部分。 如果我们想实现仍然…

C语言代码规范(六)浮点型变量逻辑比较

无论是float还是double类型的变量&#xff0c;都有精度限制。所以一定要避免将浮点变量用""或"!"与数字比较&#xff0c;应该设法转化成为">"或"<"形式。 不建议使用的例子&#xff1a; if(0.0 x) if(0.0 ! x) 强烈推荐的例…

图灵机器人调用数据恢复_机器人也能撩妹?python程序员自制微信机器人,替他俘获女神芳心...

机器人也有感情还记得王传君饰演的《星语心愿之再爱》这部电影吗&#xff1f;王传君饰演的天才程序员“王鹏鹏”因工作原因不能陪伴照顾身在异地的女朋友“林亦男”&#xff0c;呆萌宅男“王鹏鹏”开发出一款以自己为原型的“王鹏鹏8.0”程序去陪伴异地恋的女友&#xff0c;后来…

Spark排错与优化

一. 运维 1. Master挂掉,standby重启也失效 Master默认使用512M内存&#xff0c;当集群中运行的任务特别多时&#xff0c;就会挂掉&#xff0c;原因是master会读取每个task的event log日志去生成spark ui&#xff0c;内存不足自然会OOM&#xff0c;可以在master的运行日志中看到…

在MySQL上使用带密码的GlassFish JDBC安全性

我在该博客上最成功的文章之一是有关在GlassFish上使用基于表单的身份验证来建立JDBC安全领域的文章 。 对这篇文章的一些评论使我意识到&#xff0c;要真正使它安全&#xff0c;应该做的还很多。 开箱即用的安全性 图片&#xff1a; TheKenChan &#xff08; CC BY-NC 2.0 &a…

mgo写入安全机制

mgo写入安全机制 mongo写入安全mgo写入安全mongo写入安全 mongo本身也有一整套的写入安全机制,但是在这篇的内容里只介绍一小部分相关部分.先放一个链接可以跳过本节不看直接看这个 链接. WriteConcern.NONE:没有异常抛出WriteConcern.NORMAL:仅抛出网络错误异常&#xff0c;没…

C学习杂记(二)笔试题:不使用任何中间变量如何将a、b的值进行交换

常见的方法如下 void swap1(int *a, int *b) {int temp *a;*a *b;*b temp; } 不使用中间变量的方法 void swap2(int *a, int *b) {*a *a *b;*b *a - *b;*a *a - *b; } 这种方法是不可取的&#xff0c;因为ab和a-b的运算可能会导致数据溢出。 void swap3(int *a, in…

利用python进行数据分析_利用python进行数据分析复现(1)

&#xfeff;一直以来&#xff0c;都想学习python数据分析相关的知识&#xff0c;总是拖拖拉拉&#xff0c;包括这次这个分享也是。《利用python进行数据分析 第2版》是一次无意之间在简书上看到的一个分享&#xff0c;我决定将很详细。一直都想着可以复现一下。但总有理由&…