一、Ajax技术简单介绍

Ajax是一门异步的用于发送网络请求的技术。

全称为:Async javascript and XML。

简单说明:Ajax 这个概念是由 Jesse James Garrett 在 2005 年发明的。它本身不是单一技术,是一串技术的集合。

技术特点:通常情况下,每次提交表单的时候,都会刷新整个界面,而使用ajax发送请求可以实现异步发送请求获取数据而不需要刷新整个页面。

Ajax的优点

 (1)不需要插件支持(一般浏览器且默认开启 JavaScript 即可);
(2)用户体验极佳(不刷新页面即可获取可更新的数据);
(3)提升 Web 程序的性能(在传递数据的时候不必整体提交);
(4)减轻服务器和带宽的负担(将服务器的一些操作转移到客户端);

Ajax 的不足

 (1)不同版本的浏览器度XMLHttpRequest 对象支持度不同(比如IE5之前);
(2)前进、后退的功能被破坏;
(3)搜索引擎的支持度不够(引擎爬虫还不能理解JS引起变化数据的内容);
(4)开发调试工具缺乏

二、Ajax发送GET请求

① 使用Ajax发送GET请求的基本步骤

01 创建请求对象(XMLHTTPRequest
02 设置请求对象(open)请求方式为GET
03 发送请求(send)
04 监听请求的状态(onreadystatechange)
05 处理请求结果

② 使用Ajax发送GET请求的注意点

兼容性问题

//javascript创建请求对象的兼容性处理:
if(window.XMLHTTPRequest)
{
var request = new XMLHTTPRequest();
}else
{
var request = new ActiveXObject("Microsoft.XMLHTTP");
}

缓存问题

问题说明:在IE浏览器中如果发送的是GET请求,只要URL没有发生变化,那么IE浏览器就会认为网页的内容也没有发生变化,因此会优先使用缓存数据。

解决方式:如果在IE浏览器中想让数据实时更新(获取到最新的数据),那么可以让每次请求的URL都不一样(即每次请求的URL地址不一样)

具体思路:在开发中可以使用随机数因子或者是时间戳来添加一个额外的参数给url路径。

- 获取时间戳:var date = new Date();date.valueOf()
- 获取随机数因子 Math.radom()

补充说明

① 加随机数或者是时间戳的目的在于让每次请求的时候url的内容都不一样
② 参数变化的作用就是让每次发送网络请求的时候URL都不相同,以让服务器总是把最新的数据返回。

监听请求状态

onreadystatechange的几种状态

(1)请求未初始化 - 0
(2)服务器连接已经建立 - 1
(3)请求已经接收 -2
(4)请求处理中 -3
(5)请求已经完成,且响应已经就绪 -4

判断请求结果

网络请求发送之后,可能成功,也可能失败。在代码中,我们可以通过响应状态码来判断请求成功还是失败,并最终做出相应的处理。

(1)当请求完成的时候再进行处理,readyState == 4
(2)通过响应码判断请求成功还是失败,status == 200
(3)请求成功解析服务器返回的响应体:response.Text

请求超时

在开发中可能需要对请求的时间进行限制,例如要求设置网络请求的超时时间为10秒,如果超过了该时间那么就提示用户检查网络。

在具体的代码实现中,该需求可以使用定时器配合abort方法来实现。

中文转码

在发送GET请求的时候,如果请求路径中存在中文,那么在发送网络请求之前应该先对请求路径进行中文转码处理,使用encodeURI方法来完成。

③ 使用Ajax发送GET请求的代码示例

// 数据处理方法
function json2str(data) {
var arr = [];
for(var key in data){
arr.push(key+"="+data[key]);
}
// 不能直接将中文提交给服务器, 中文需要编码之后再提交
return encodeURI(arr.join("&"));
} // 发送请求方法
function myAjax(url, data,timeout,success, error) {
// 0.对参数进行处理
var res = json2str(data); // 1.创建异步对象
if(window.XMLHttpRequest){
var xhr = new XMLHttpRequest();
}else{
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
// 2.设置URL
xhr.open("get", url+"?"+res, true);
// 3.发送请求
xhr.send();
// 4.监听状态
xhr.onreadystatechange = function () {
// 5.处理返回结果
if(xhr.readyState == 4){
// 清空定时器
clearTimeout(timer);
if(xhr.status == 200){
success(xhr.responseText);
}else{
error(xhr.status);
}
}
}
// 6.对超时时间处理
var timer = setTimeout(function () {
alert("超时了");
// 中断请求
xhr.abort();
}, timeout);
}

三、Ajax发送POST请求

① 使用Ajax发送POST请求的基本步骤

01 创建请求对象(XMLHTTPRequest)
02 设置请求对象(open)请求方式为POST
03 设置请求头信息
- xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 04 发送请求(send),参数以查询字符串的方式传递
05 监听请求的状态(onreadystatechange)
06 处理请求结果

② 使用Ajax发送POST请求的代码示例

       //001 创建请求对象
var xhr;
if(window.XMLHttpRequest)
{
xhr = new XMLHttpRequest();
}else
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} //02 设置请求方法和请求路径
xhr.open("post","php/04-post.php",true); //++ 设置请求头信息
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
//03 发送请求
//++ 把提交的参数存放在请求体中提交
xhr.send("username=zs&password=123"); //04 监听网络请求的状态
xhr.onreadystatechange = function () {
if(xhr.readyState == 4)
{
//05 解析服务器返回的数据
if(xhr.status == 200)
{
console.log("请求成功" + xhr.responseText);
}else
{
console.log("请求失败" + xhr.status);
}
}
}
}

前端开发系列062-网络篇之前端开发Ajax简单介绍的更多相关文章

  1. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  2. openlayers5-webpack 入门开发系列一初探篇(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

  3. leaflet-webpack 入门开发系列一初探篇(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...

  4. 【Windows10 IoT开发系列】配置篇

    原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...

  5. ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  6. ESP8266开发之旅 网络篇⑨ HttpClient——ESP8266HTTPClient库的使用

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  7. ESP8266开发之旅 网络篇⑯ 无线更新——OTA固件更新

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  8. ESP8266开发之旅 网络篇③ Soft-AP——ESP8266WiFiAP库的使用

    1. 前言     在前面的篇章中,博主给大家讲解了ESP8266的软硬件配置以及基本功能使用,目的就是想让大家有个初步认识.并且,博主一直重点强调 ESP8266 WiFi模块有三种工作模式: St ...

  9. ESP8266开发之旅 网络篇④ Station——ESP8266WiFiSTA库的使用

    1. 前言     在前面的篇章中,博主给大家讲解了ESP8266的软硬件配置以及基本功能使用,目的就是想让大家有个初步认识.并且,博主一直重点强调 ESP8266 WiFi模块有三种工作模式: St ...

  10. ESP8266开发之旅 网络篇⑤ Scan WiFi——ESP8266WiFiScan库的使用

    1. 前言     现在,通常,为了让手机连上一个WiFi热点,基本上都是打开手机设置里面的WiFi设置功能,然后会看到里面有个WiFi热点列表,然后选择你要的连接上. 基本上你只要打开手机连接WiF ...

随机推荐

  1. unity 多层叠加的BillBoard特效转序列帧特效降低overdraw

  2. java基础之String类、Math类、Arrays类、Collections类

    一.String类 概述:程序中所有的双引号字符串,都是String类的对象.(就算没有new,照样算是) 特点: 1.字符串的内容用不可变[重点] 2.因为字符串[String对象]是不可变的,所以 ...

  3. 康谋分享 | ADTF过滤器全面解析:构建、配置与数据处理应用

    在ADTF (Automotive Data and Time-Triggered Framework)中,过滤器(Filter)扮演着数据处理的核心角色.过滤器是处理数据流的基本单元,它们接收.处理 ...

  4. 搞定 XLSX 预览?别瞎找了,这几个库(尤其最后一个)真香!

    -   Hey, 我是 沉浸式趣谈 -   本文首发于[沉浸式趣谈],我的个人博客 **https://yaolifeng.com** 也同步更新. -   转载请在文章开头注明出处和版权信息. - ...

  5. 操作系统综合题之“短进程优先调度算法(Shortest-Process-First,SPF)和非抢占式优先权调度算法(Priority-Scheduling Lgorithm)的进程执行顺序并计算周转时间以及平均周转时间【分开计算题】”

    一.问题: 1.当系统采用短进程优先调度算法时,试写出进程的执行顺序,并计算各个进程的周转时间以及平均周转时间 2.当系统采用优先权调度算法时,试写出进程的执行顺序,并计算各个进程的周转时间以及平均周 ...

  6. Form验证笔记

    views    request.body        request.POST(request.body)        request.FILES(request.body)        re ...

  7. 小程序简单 tab 切换实现

    也是终于找到了数据可视化的最佳载体, 用小程序来做可视化简直完美. 尤其对于像我这种搞数据的, 数据分析, 数据报表, 可视化一直是一个巨大难题, 当我认识的最终的方案还是要用前端的时候, 感觉还有麻 ...

  8. FastMCP(python)和 SolonMCP(java)的体验比较(不能说一样,但真的很像)

    从 MCP SDK 的发展史上看,FastMCP 是前辈,SolonMCP 则是后辈.mcp-python-sdk 功能完善,已经很成熟了.而 mcp-java-sdk 却还不完善,比如: 还不支持 ...

  9. CTP报单业务介绍

    程序化登录信息 客户如果需要调用API介入柜台进行程序化交易,登录时需要一些基本信息,如下: 1.BrokerID 简称期货编码,是在该期货公司在CTP系统上的编码,为四位数,例如海通期货是8000 ...

  10. JAVA的那些数据结构实现总结,实现,扩容说明

    能沉淀下来的东西,往往都很基础,整理了下JAVA中遇到的数据结构 目录大纲: 到目前接触到的 有几个说明: 可扩容数组 ArrayList 扩容数组的实现, 满了后扩容,扩容在1.5倍,通过copy过 ...