Web前端Javascript笔记(8)Ajax前后端交互
认识Ajax
全名Asynchronous Javascript and XML(异步JavaScript和XML),节省用户操作时间,提高用户体验,减少数据请求,传输获取数据。Ajax相当于前后台数据交互的搬运工
xml数据传输格式:
优点:
1. 种类丰富
2. 传输量大
缺点:
1. 解析麻烦
2. 不太适合轻量级数据
json数据传输格式:(移动端)
优点:
1. 轻量级数据
2. 解析比较轻松
缺点:
1. 数据种类少
2. 传输数据量少
同步:阻塞,当前程序的运行,必须等前一个程序运行完以后,才能运行。
异步:当前程序的运行不用等待前一个程序
<script>window.onload = function () {let tag_btn = document.getElementById("btn1");tag_btn.onclick = function () {let ajax = null;if(window.XMLHttpRequest) // 做浏览器兼容 IE8以下不兼容{ajax = new XMLHttpRequest(); // 创建一个Ajax对象}else{ajax = new ActiveXObject("Microsoft.XMLHTTP");}// 调用open(method, url, bool)方法// 参数: method: 请求方式 post, get// 参数: url: 请求的文件地址// 参数: bool: true 异步 false: 同步ajax.open("get", "../data/test.txt", true);// 调用send()方法,发送请求ajax.send();// 等待数据响应ajax.onreadystatechange = function () {if (ajax.readyState === 4){alert(ajax.responseText);}}}}
</script>
新的ajax兼容方法:
try...catch{}
<script>window.onload = function () {let tag_btn = document.getElementById("btn1");tag_btn.onclick = function () {let ajax = null;try // 做浏览器兼容 IE8以下不兼容{ajax = new XMLHttpRequest(); // 创建一个Ajax对象// throw new Error("异常信息"); // 同时可以抛出异常}catch (e) {ajax = new ActiveXObject("Microsoft.XMLHTTP");}// 调用open(method, url, bool)方法// 参数: method: 请求方式 post, get// 参数: url: 请求的文件地址// 参数: bool: true 异步 false: 同步ajax.open("get", "../data/test.txt", true);// 调用send()方法,发送请求ajax.send();// 等待数据响应ajax.onreadystatechange = function () {if (ajax.readyState === 4){alert(ajax.responseText);}}}}
</script>
Ajax的onreadyStateExchange
在ajax中,onreadyStateExchange是一个事件,当readyState发生变化的时候,会触发这一事件,readyState一共有5个值,0~4
0:(初始化)还没有调用open()方法
1:(载入)已调用send()方法,正在发送请求
2: (载入完成)send()方法完成,已收全部响应内容
3:(解析)正在解析响应内容
4: (完成)响应内容解析完成,可以在客户端调用了
responseText: 以文本的格式返回数据
responseXML:以XML数据格式返回数据
status状态码:
200:下载成功
404:不存在
ajax中get与post请求:
get请求: 将数据拼接到url后面进行提交,参数通过查询字符串的方式传递,这样不安全,且地址栏的数据大小是有限的(最大2k),所以无法完成上传资源。
post请求:不把数据拼接到url后面,通过浏览器内进行提交,更加安全。理论上没有大小限制,适合完成上传任务。
ajax函数的封装
为了使得ajax能够适应各种请求,所以对ajax进行封装
// ajax请求进行封装
function $ajax({method, url, data}) {let ajax = null;try // 做浏览器兼容 IE8以下不兼容{ajax = new XMLHttpRequest(); // 创建一个Ajax对象}catch (e) {ajax = new ActiveXObject("Microsoft.XMLHTTP");}if (method === "get" && data){url += "?" + data; // get方法需要将请求参数拼接到url上面}ajax.open(method, url, true);if (method === "get"){ajax.send();}else{// post方法的话需要设置请求头ajax.setRequestHeader("content-type", "application/x-www-form-urlencoded");ajax.send(data);}ajax.onreadystatechange = function () {if (ajax.readyState === 4){if (ajax.status === 200){alert(ajax.responseText);}else{alert("Error: " + ajax.status);}}};
}
回调函数:
不同的下载需求,对于数据的处理是不同的,所以需要写一段专门处理数据的代码,这段代码可以称为回调函数,回调函数的作用就是将一段代码作为参数,传递到函数里面,在合适的地方进行调用。
// ajax请求进行封装
function $ajax({method, url, data, success, error}) {let ajax = null;try // 做浏览器兼容 IE8以下不兼容{ajax = new XMLHttpRequest(); // 创建一个Ajax对象}catch (e) {ajax = new ActiveXObject("Microsoft.XMLHTTP");}if (method === "get" && data){url += "?" + data; // get方法需要将请求参数拼接到url上面}ajax.open(method, url, true);if (method === "get"){ajax.send();}else{// post方法的话需要设置请求头ajax.setRequestHeader("content-type", "application/x-www-form-urlencoded");ajax.send(data);}ajax.onreadystatechange = function () {if (ajax.readyState === 4){if (ajax.status === 200){if (success) // 判断如果传入了回调函数,则调用回调函数{success(ajax.responseText); // 执行下载成功的回调函数}}else{if (error) // 判断是否传入了下载失败的回调函数{error(ajax.status); // 调用回调函数}}}};
}
JSON对象
数据在前端后端之间进行传输,需要将前端,后端中的数据结构,打包成一种传输效率更高的形式,即字符串。
系统提供了JSON对象,用于抓换JSON格式的数据
1. stringify():用于将JSON格式的数据转化为JSON格式的字符串
2. parse():用于将JSON格式的字符串转化为对应的格式
<script>let arr = [1,2,3,"hello"];let new_data = JSON.stringify(arr);alert(typeof new_data);let str = '[1,2,3,"hhh"]';let new_arr = JSON.parse(str);alert(new_arr);let obj = {name: "li",age: 22,sex: "female"};let new_arr1 = JSON.stringify(obj);alert(new_arr1);
</script>
Web前端Javascript笔记(8)Ajax前后端交互相关推荐
- Web前端JavaScript笔记(4)节点
如何获取元素节点的属性: 在Web前端JavaScript笔记(3)对象中,介绍了访问行间属性的方法,除此之外,系统还提供了三个方法访问元素的属性: 1. setAttribute: 2. getAt ...
- Ajax前后端交互利器详解(一)
✍Ajax前后端交互利器
- [JavaScript][AJAX] 前后端交互流程,ajax工作流程
目录 前后端交互流程 1.了解服务器 : 提供服务器的机器(计算机) 2.前端 访问服务器的几种方式 3.ajax技术 : 页面不跳转的情况下,向服务器请求数据 4.前后端交互三个流程 ajax工作流 ...
- Web前端JavaScript笔记(3)对象
在JavaScript中没有类这个概念,只有对象,在新ECMA6新版中增加了类的概念,和数组,字符串类似,对象的声明方法也有三种: 1. 通过new运算符进行传件对象 2. 省略new运算符创建对象 ...
- Web前端Javascript笔记(6)正则表达式
在web前端中,假设用户需要提交表单,在表单提交到服务器进一步处理之前,Javascript程序会检查表单,以确认用户输入的信息是符合规范要求的.这些工作可以使用正则表达式完成,正则表达式是一个描述字 ...
- Web前端Javascript笔记(5)事件
1. 什么是事件:事件是指发生并得到处理的操作 JavaScript中的事件是由访问web页面的用户引起的一系列操作,例如,用户的点击操作,JavaScript中有两种事件模型:内联模型,脚本模型. ...
- Web前端 Javascript笔记(1)数组
结构 :html构建 样式:css控制 行为:JavaScript实现 什么是JavaScript? JavaScript是一种跨平台的脚本语言,平台,即运行环境,一般指操作系统. --------- ...
- Web前端JavaScript笔记(5)事件-拖拽
阻止默认行为和超链接 在浏览器上运行网页后,右击会弹出菜单,这属于浏览器的默认行为.如何禁止这一默认行为: <script>window.onload = function () {doc ...
- Web前端JavaScript笔记(7)ECMA6新增数组方法
新增数组方法: 1. Array.from(): 将伪数组转化为真数组 <script>window.onload = function () {let tag_li = documen ...
最新文章
- 在linux中如何高效的使用帮助
- matlab 计算运行时间的办法
- python判断语句_python条件判断语句if elif else使用
- CentOS7虚拟机之间设置免密登录
- FMS3系列(二):创建可交互的FMS连接--I can say:Hello World
- 计算机应用基础本科常见问题讨论,《计算机应用基础》(本科)2017年6月期末考试指导.pdf...
- cf1504. Travelling Salesman Problem
- C#总结项目《影院售票系统》编写总结一
- PID算法 旋转倒立摆与平衡车的区别。此贴后边会更新。
- linux 脚本加密工具下载,linux truecrypt 加密工具
- Selenium调用使用360浏览器,QQ浏览器,遨游浏览器,猎豹浏览器,Chromium
- NXP:I2C总线技术规范和用户手册(中文版)(一)
- 如何查询一个网站的域名备案信息?
- 学习笔记:用冲激函数的傅里叶变换求阶跃函数的傅里叶变换
- Graphics.DrawString 方法
- Java-c3p0原生写法
- 电脑休眠后无法唤醒的解决办法!
- 通过usb利用adb实现android手机和pc机通信
- 斗地主自动出牌函数c语言,斗地主AI出牌(示例代码)
- docker-compose 部署 php + nginx + mysql + redis
热门文章
- JAVA高并发服务器工作笔记0001---Java中InetAddress与InetSocketAddress的基本用法
- SpringCloud学习笔记025---SpringBoot_注释理解_@Qualifier 注释
- C/C++遍历Windows文件夹下的所有文件
- 数据库增加列或删除列操作
- 华为鸿蒙系统手机央视,央视再次确认!华为投入巨资打造鸿蒙系统生态:体验媲美七成安卓...
- 学fpga(在线verilog编程)
- 随想录(easyx开发上位机)
- java定时运行一个url_Swift 4:如何异步使用URLSessionDataTask但请求是否在一个定时队列中?...
- java从端口接收数据_java - Java中通过串行端口接收数据的效率更高 - 堆栈内存溢出...
- Linux里sra文件是什么,prefetch命令下载SRA文件