一、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. oracle的order by 中文排序原理

    近期发现oracle的order by中文排序并不是完全按照拼音排序的 经过测试发现oracle的order by中文排序是按照中文的ASCII码排序的 查询字符ASCII码 select ascii ...

  2. nohup启动jar包

    1. 后台启动jar包,并追加日志到日志文件run.log nohup java -jar wash-1.0-SNAPSHOT.jar >> run.log 2>&1 &am ...

  3. 大模型微调实战:通过 LoRA 微调修改模型自我认知

    本文主要分享如何使用 LLaMAFactory 实现大模型微调,基于 Qwen1.5-1.8B-Chat 模型进行 LoRA 微调,修改模型自我认知. 本文的一个目的:基于 Qwen1.5-1.8B- ...

  4. centos安装npm和 nodejs

    NPM安装 00X01:创建目录 mkdir /usr/local/node/ cd /usr/local/node/ 00x02:下载安装包 wget https://npm.taobao.org/ ...

  5. Docker自定义镜像输出日志

    概述 本文主要解决Docker自定义镜像之后,通过docker logs命令查看不到相关日志的问题 在 Docker 中自定义镜像输出日志,通常需要确保你的应用程序将日志输出到 标准输出(stdout ...

  6. Ubuntu堡垒机搭建与设备管理指南

    以下是基于Ubuntu系统搭建堡垒机并集成设备管理的详细步骤和注意事项: 一.堡垒机搭建步骤 系统准备 sudo apt update && sudo apt upgrade -y s ...

  7. 基于Jetson Nano与PyTorch的无人机实时目标跟踪系统搭建指南

    引言:边缘计算赋能智能监控 在AIoT时代,将深度学习模型部署到嵌入式设备已成为行业刚需.本文将手把手指导读者在NVIDIA Jetson Nano(4GB版本)开发板上,构建基于YOLOv5+SOR ...

  8. Flutter跨平台发送系统通知和状态栏通知技术浅析

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  9. Web前端入门第 56 问:JavaScript 变量声明 var、let、const 区别

    曾经 var 如帝王一般统治过 JS 的变量声明,直到后来大佬们实在是忍不了 var 那稀烂的声明规则,便引入了 let 和 const 这两大刀斧手,var 被轻轻松松的斩落马下,如今,再难看见 v ...

  10. 秒杀/高并发解决方案+落地实现 (技术栈: SpringBoot+Mysql + Redis +RabbitMQ +MyBatis-Plus +Maven + Linux + Jmeter )-01

    秒杀/高并发方案-介绍 @ 目录 秒杀/高并发方案-介绍 秒杀/高并发解决方案+落地实现 (技术栈: SpringBoot+Mysql + Redis +RabbitMQ +MyBatis-Plus ...