Ajax是个什么玩意儿
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 的优点:
- 最大的优点是页面无刷新更新,用户的体验非常好;
- 使用异步方式与服务器通信,具有更迅速的响应能力;
- 可以将一些服务器工作转移到客户端,利用客户端资源来处理,减轻服务器和带宽的压力,节约空间和带宽租用成本;
- 技术标准化,并被浏览器广泛支持,不需要下载插件或者小程序;
- Ajax 可使因特网应用程序更小、更快、更友好。
Ajax 的缺点:
- Ajax 不支持浏览器 back 返回按钮;
- 有安全问题,Ajax 暴露了与服务器交互的细节;
- 对搜索引擎不友好;
- 破坏了程序的异常机制;
- 不容易调试。
以上都是网上找的说法,优点的中心思想快,方便,节约空间、兼容性高,缺点的话就是不太安全,偶尔也不太稳定,但是写代码嘛,找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()方法就出现了。
大家都是上流社会的人,GET和POST的区别不会不知道吧。
简单举个
Ajax是个什么玩意儿相关推荐
- EF 4.1+MVC3+Jquery Ajax+Json.Net+JqueryUI+IUnitOfWork+Repository 学习DEMO(暂停更新)
学习项目进行中,持续更新. SyntaxHighlighter貌似在2011wlw里报错,无法着色. EF记得在我搞Linq2Sql不久就放出声音出来了,说有多么多么好. 记得早先版本里尝鲜的时候我一 ...
- Ajax全局加载框(Loading效果)的配置
在Ajax进行后台数据请求的过程中,我们有时候会希望用户能知道页面后台还在做一些事情,这时候就需要给用户一个非常明确的提示,也就是我们所谓的进度条 废话完成~ 实现原理: Jquery可以对ajax进 ...
- php后台登录页修改成ajax,使用php后台给自己做一个页面路由,配合ajax实现局部刷新。(示例代码)...
今天就要放假了,把近来囤积的小玩意儿总结整理一下. 在请求一个html页面来嵌入到当前页会有一个问题,就是跟随请求过来的html他的样式表和脚本会失效.是因为文档加载的先后顺序等问题造成的.因此,加载 ...
- ajax提交数据给谁,jquery ajax提交数据给后端
大家好,今天铁柱兄给大家带一段jquery ajax提交数据给后端的教学. 初学javaweb的同学前端提交数据基本上都是用form表单提交,这玩意儿反正我是觉得不太好玩.而JavaScript aj ...
- ajax angular点击事件_angularjs和ajax的结合使用 (三)
转眼九月份了,忙忙碌碌 发现今年还没开过张,写一篇吧. 15年在空闲时就倒腾过angularjs那玩意儿 ,觉得还是挺好的,李金龙那厚厚的一本书,只不过没有系统化应用.最主要的是原来有一个东西没有用到 ...
- 益达教你如何抓取Ajax动态页面
何为Ajax动态网页,我想不用我多说了吧,如果你连Ajax是啥玩意儿都不知道,那你还是先去Google学习Ajax吧.为了形象起见,这里我以抓取这个网页为例进行讲解说明.网页链接如下: ...
- 歪打正着解决了一个AJAX跨域的问题
这个十一,冰儿去逛了圈儿欧洲回来,回来就想逃离北京了.我听着很是心痛.这,时差还没倒回来,她就又出差了,在伸手不见五指的华北,她驱车高速路,如坠死境. 我发了张北京城仙境照,让厦门和深圳的笑喷了.我独 ...
- 一文搞懂Ajax,附Ajax面试题
文章目录 前言 正文 Ajax是什么东西? 实现核心/工作原理:XMLHttpRequest对象 XMLHttpRequest大致用法 创建XMLHttpRequest对象 发送请求 服务器响应 1. ...
- html+spring boot简单的ajax数据传输实现
本篇讲解在前后端不分离情况下的html+spring boot的项目数据传输实现 首先,后台我写了三个接口 package com.demo.ajax.controller;import com.de ...
最新文章
- tar -cvPf new.tar `rpm -ql vsftpd` 建议不要用绝对路径'/'
- C++中虚函数、虚指针和虚表详解
- DataList编辑、更新、取消、删除、分页(分页控件 AspNetPager.dll)
- Ukbench图像数据集
- Java 13,最新最全新特性解读
- 一文了解OOM及解决方案,你还看不明白?
- ESFramework介绍之(14)-- AS与FS通信方案
- linux 登入用户记录,linux记录所有用户登陆及执行过的命令脚本
- pillow api
- unity游戏教程 space shooter (游戏控制器)
- 诺基亚n9支不支持java,支持诺基亚N9 MeeGo UC浏览器正式发布
- 惠普OMEN游戏本驱动曝内核级漏洞,影响数百万Windows 计算机
- linux限制堆栈大小,进程超过RedHat Enterprise Linux 6的线程堆栈大小限制?
- JavaScript之数组学习
- matlab环境下图像分形维数的计算,MATLAB环境下图像分形维数的计算_杨书申
- mysql phpwind_PHPWind环境搭建(Linux)
- 可更新鸿蒙的手机,华为EMUI 11首批10款手机适配:可优先升级鸿蒙OS 2.0
- linux学习篇 之 复制、黏贴、删除、撤销
- 拼多多向1688开枪
- 火狐使用js下载文件_如何使用Firefox Send安全地将大文件发送给任何人
热门文章
- 工作四年都没搞定的Mysql事务和锁机制,这篇一次讲清!
- linux下载python 没有iedl_在Ubuntu 12.04上安装IEs4Linux的步骤
- python svm函数,带有huber损失的python svm函数
- 海思芯片文件及查看方法
- 【运维面试】k8s的监控指标
- NeuroImage:多模态超扫描揭示母与子在身体和心灵上的同步
- matlab正交gold码的相关性,基于Matlab的CDMA通信系统仿真
- npp夜光数据介绍 viirs_最新 夜光遥感影像VIIRSDMSP下载总结
- 0x0FDFE224 (ucrtbased.dll)处(位于.exe 中)引发的异常: 0xC0000005: 写入位置 0x01100000 时发生访问冲突。 如有适用于此异常的处
- 【安全专业能力】关于一个安全人员必须要学会的技能