1 Ajax基础

在了解Ajax之前,先来看看前端开发的演变吧。

前端开发的演变
  • 静态网页阶段

    这个阶段的网页没有数据交互,所有的前端数据都由后端生成、维护,前端只负责纯粹的展示功能。如果需要更新页面内容,必须重新加载整个网页。

    带来的问题是:当我们只希望更新页面中一小部分的内容时,会因为重载网页而对页面中的所有资源也重新加载一遍,不仅用户体验不友好,还增加了服务器的负担。

  • Ajax 阶段

    为了解决上述问题,在 2004 年诞生了 Ajax 技术,让页面的局部刷新成为了可能,从而改变了前端开发,使得前端不仅仅是展示页面,还可以管理数据并与用户互动。

    Ajax 技术指的是脚本独立向服务器请求数据,拿到数据以后,进行处理并更新网页。整个过程中,后端只是负责提供数据,其他事情都由前端处理,实现了 “获取数据 → 处理数据 → 展示数据” 的完整业务逻辑。

Ajax简介

Ajax 的全称是 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),是一种用于创建动态网页的技术。

Ajax 是一种使用现有标准的新方法,通过与服务器进行少量的数据交换,Ajax 可以使网页实现异步更新,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

总结一下上面几行字,中心思想便是Ajax 的出现让网页的整体变得舒适流畅,这点将会在后面的内容中不断体现出来,这儿划一个重点的额关键词——异步

Ajax的工作原理

接下来来张正儿八经的知识点的图。在用户界面和服务器之间加上一个Ajax引擎,便是实现异步的关键点。

Ajax的一个例子

这里就用“勾诶斯”来实例化一个简单的Ajax吧。

function AjaxRequest(){//实例化一个Ajax对象(经典new对象)var xhr = XMLHttpRequest();//open方法,后面细讲xhr.open("GET","某个url",true)//将请求发到服务器去,跟open一起用xhr.send();//这里做两个简单判断,一是看访问进程,二是看访问结果xhr.onreadystatechange = function(){// 当 readyState 等于 4 且状态为正常时,表示响应已就绪if (xhr.readyState === 4) {alert("流程给走完了");if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304){alert("访问也没啥问题");}}                }
}
Ajax的优缺点

Ajax 的优点:

  1. 最大的优点是页面无刷新更新,用户的体验非常好;
  2. 使用异步方式与服务器通信,具有更迅速的响应能力;
  3. 可以将一些服务器工作转移到客户端,利用客户端资源来处理,减轻服务器和带宽的压力,节约空间和带宽租用成本;
  4. 技术标准化,并被浏览器广泛支持,不需要下载插件或者小程序;
  5. Ajax 可使因特网应用程序更小、更快、更友好。

Ajax 的缺点:

  1. Ajax 不支持浏览器 back 返回按钮;
  2. 有安全问题,Ajax 暴露了与服务器交互的细节;
  3. 对搜索引擎不友好;
  4. 破坏了程序的异常机制;
  5. 不容易调试。

以上都是网上找的说法,优点的中心思想快,方便,节约空间、兼容性高,缺点的话就是不太安全,偶尔也不太稳定,但是写代码嘛,找bug才是快乐源泉呐。

Ajax核心技术介绍

上面的例子其实也就把Ajax和核心部分大致地体现出来了,接下来我们就一行一行代码的看看。

XMLHttpRequest()

这玩意儿其实就是个类,那么对面向对象有那么一丁点儿感觉的应该都知道,第一件要做的事儿就是先去实例化一下这个对象。毕竟是前端的东西,浏览器几经更迭,自然有些许跟不上时代的节奏。

但好在,IE7以后就都没问题了,但为了严谨,也为了使用方便,这儿就直接给大家整个可以兼容的代码,以后实例化直接拿去用就完事儿。

// 三元表达式,其中问号前面的是条件,当条件是正确的就执行冒号前面的语句,否则执行冒号后面的语句
var xhr = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
open()方法

实例化的工作已经结束了,那我们用啥子东西去找这个服务器诶,open()就来了。

解析:xhr.open(method, url, async)

  • method:

    • 第一个参数用于指定 HTTP 请求的方法,不区分大小写;
    • 该参数可取的值包括:“GET”、“POST”、“HEAD”、“PUT”、“OPTIONS”、“DELETE”,其中,“GET” 和 “POST” 是得到广泛支持的请求方法;
  • url:

    • 第二个参数用于指定 HTTP 请求的 URL 地址,可以是 绝对URL相对URL
    • 绝对URL:需要满足 “同源策略”(服务器明确允许跨域请求的情况除外);
    • 相对URL:即相对于文档的 URL;
  • async:

    • 第三个参数是可选的,可用布尔值指定脚本是否以异步的方式调用此次 Ajax 请求;
    • 该参数默认为 true,表示异步调用此次 Ajax 请求,不阻塞后续脚本的执行;

前两个参数应该没啥问题,在很多地方都有,第三个参数的话便是之前说的Ajax的核心,即是否异步处理这一块儿,后面等几行代码都说完了再来说一下这个。

send()方法

既然都已经访问到了服务器,那还不得传点儿东西东西过去?总不能占着茅坑不拉屎嘛。这时候send()方法就出现了。

大家都是上流社会的人,GETPOST的区别不会不知道吧。

简单举个

Ajax是个什么玩意儿相关推荐

  1. EF 4.1+MVC3+Jquery Ajax+Json.Net+JqueryUI+IUnitOfWork+Repository 学习DEMO(暂停更新)

    学习项目进行中,持续更新. SyntaxHighlighter貌似在2011wlw里报错,无法着色. EF记得在我搞Linq2Sql不久就放出声音出来了,说有多么多么好. 记得早先版本里尝鲜的时候我一 ...

  2. Ajax全局加载框(Loading效果)的配置

    在Ajax进行后台数据请求的过程中,我们有时候会希望用户能知道页面后台还在做一些事情,这时候就需要给用户一个非常明确的提示,也就是我们所谓的进度条 废话完成~ 实现原理: Jquery可以对ajax进 ...

  3. php后台登录页修改成ajax,使用php后台给自己做一个页面路由,配合ajax实现局部刷新。(示例代码)...

    今天就要放假了,把近来囤积的小玩意儿总结整理一下. 在请求一个html页面来嵌入到当前页会有一个问题,就是跟随请求过来的html他的样式表和脚本会失效.是因为文档加载的先后顺序等问题造成的.因此,加载 ...

  4. ajax提交数据给谁,jquery ajax提交数据给后端

    大家好,今天铁柱兄给大家带一段jquery ajax提交数据给后端的教学. 初学javaweb的同学前端提交数据基本上都是用form表单提交,这玩意儿反正我是觉得不太好玩.而JavaScript aj ...

  5. ajax angular点击事件_angularjs和ajax的结合使用 (三)

    转眼九月份了,忙忙碌碌 发现今年还没开过张,写一篇吧. 15年在空闲时就倒腾过angularjs那玩意儿 ,觉得还是挺好的,李金龙那厚厚的一本书,只不过没有系统化应用.最主要的是原来有一个东西没有用到 ...

  6. 益达教你如何抓取Ajax动态页面

    何为Ajax动态网页,我想不用我多说了吧,如果你连Ajax是啥玩意儿都不知道,那你还是先去Google学习Ajax吧.为了形象起见,这里我以抓取这个网页为例进行讲解说明.网页链接如下:         ...

  7. 歪打正着解决了一个AJAX跨域的问题

    这个十一,冰儿去逛了圈儿欧洲回来,回来就想逃离北京了.我听着很是心痛.这,时差还没倒回来,她就又出差了,在伸手不见五指的华北,她驱车高速路,如坠死境. 我发了张北京城仙境照,让厦门和深圳的笑喷了.我独 ...

  8. 一文搞懂Ajax,附Ajax面试题

    文章目录 前言 正文 Ajax是什么东西? 实现核心/工作原理:XMLHttpRequest对象 XMLHttpRequest大致用法 创建XMLHttpRequest对象 发送请求 服务器响应 1. ...

  9. html+spring boot简单的ajax数据传输实现

    本篇讲解在前后端不分离情况下的html+spring boot的项目数据传输实现 首先,后台我写了三个接口 package com.demo.ajax.controller;import com.de ...

最新文章

  1. tar -cvPf new.tar `rpm -ql vsftpd` 建议不要用绝对路径'/'
  2. C++中虚函数、虚指针和虚表详解
  3. DataList编辑、更新、取消、删除、分页(分页控件 AspNetPager.dll)
  4. Ukbench图像数据集
  5. Java 13,最新最全新特性解读
  6. 一文了解OOM及解决方案,你还看不明白?
  7. ESFramework介绍之(14)-- AS与FS通信方案
  8. linux 登入用户记录,linux记录所有用户登陆及执行过的命令脚本
  9. pillow api
  10. unity游戏教程 space shooter (游戏控制器)
  11. 诺基亚n9支不支持java,支持诺基亚N9 MeeGo UC浏览器正式发布
  12. 惠普OMEN游戏本驱动曝内核级漏洞,影响数百万Windows 计算机
  13. linux限制堆栈大小,进程超过RedHat Enterprise Linux 6的线程堆栈大小限制?
  14. JavaScript之数组学习
  15. matlab环境下图像分形维数的计算,MATLAB环境下图像分形维数的计算_杨书申
  16. mysql phpwind_PHPWind环境搭建(Linux)
  17. 可更新鸿蒙的手机,华为EMUI 11首批10款手机适配:可优先升级鸿蒙OS 2.0
  18. linux学习篇 之 复制、黏贴、删除、撤销
  19. 拼多多向1688开枪
  20. 火狐使用js下载文件_如何使用Firefox Send安全地将大文件发送给任何人

热门文章

  1. 工作四年都没搞定的Mysql事务和锁机制,这篇一次讲清!
  2. linux下载python 没有iedl_在Ubuntu 12.04上安装IEs4Linux的步骤
  3. python svm函数,带有huber损失的python svm函数
  4. 海思芯片文件及查看方法
  5. 【运维面试】k8s的监控指标
  6. NeuroImage:多模态超扫描揭示母与子在身体和心灵上的同步
  7. matlab正交gold码的相关性,基于Matlab的CDMA通信系统仿真
  8. npp夜光数据介绍 viirs_最新 夜光遥感影像VIIRSDMSP下载总结
  9. 0x0FDFE224 (ucrtbased.dll)处(位于.exe 中)引发的异常: 0xC0000005: 写入位置 0x01100000 时发生访问冲突。 如有适用于此异常的处
  10. 【安全专业能力】关于一个安全人员必须要学会的技能