首页 > 其他分享 >浅谈AJAX

浅谈AJAX

时间:2023-10-17 23:24:29浏览次数:31  
标签:HTTP 浅谈 请求 响应 AJAX 服务器 页面

什么是AJAX?

AJAX(Asynchronous JavaScript and XML),中文叫做:异步的JavaScript和XML。这是一种 Web 交互方法

AJAX说白了,就是”服务器和客户端之间是如何交流的?“

这是一种“老技术,新用法”。它最早是2005年由"AJAX之父"Jesse James Garrett提出。

AJAX技术的理解

实际上,它是由几项已经存在的技术组合而成的。AJAX技术包含了JavaScript、XML、CSS、XTSL、DOM、HTML/XHML和XMLHttpRequest 七种技术,这些技术通过AJAX联合起来,取长补短。

AJAX 允许只更新一个 HTML 页面的部分 DOM(文档对象模型:当网页被加载时,浏览器会创建页面的文档对象模型),而无须重新加载整个页面。AJAX 还允许异步工作,这意味着当网页的一部分正试图重新加载时,你的代码可以继续运行(相比之下,同步会阻止代码继续运行,直到这部分的网页完成重新加载)。

AJAX的五大特点

  1. 无需刷新页面就可以改变页面内容,减少用户等待事件和资源调用。
  2. 按需获取数据,每次只从服务器端获取需要的数据
  3. 读取外部数据,进行数据处理整合
  4. 异步与服务器进行交互,在交互过程中用户无需等待,仍然可以继续操作
  5. 改善表单验证方式,不需要打开新页面,也不需要将整个页面数据提交

AJAX与传统web区别

AJAX交互

  • 通过XMLHttpRequest(XHR)对象与服务器进行交互 (通过XMLHttpRequest可以在不刷新页面的情况下请求特定 URL,获取数据。尽管名称如此,XMLHttpRequest 可以用于获取任何类型的数据,而不仅仅是 XML。它甚至支持 HTTP 以外的协议(包括 file:// 和 FTP),尽管可能受到更多出于安全等原因的限制。)
  • XHR请求的数据不是页面
  • XHR可以连续向服务器发送请求(即支持异步操作)

传统web交互

  • 通过HTTP与服务器交互

  • HTTP请求的是整个页面

  • HTTP是请求响应的,必须等服务器响应页面后,才能再发送下一个HTTP请求(即不支持异步操作)

AJAX的核心优势

  • 按需获取数据(核心)

    不像传统web一样,服务其每次响应一整个页面。Ajax可以只会让服务器响应当下页面需要更新的数据,大大减少了数据的实际传输量

  • 节约网络带宽

    由于降低数据传输量,就相当于减轻服务器和带宽的负担,并且Ajax技术可以将传统服务器的工作转嫁给客户端,进一步节约空间和带宽

  • 无需刷新页面

    通过异步发送请求,Ajax技术只是更新数据,无需改变整个页面

  • 基于标准化技术

    几乎所有的浏览器都支持Ajax技术

AJAX使用的步骤

  • 建立XMLHTTPRequest对象(原因见上述区别)
  • 设置获取web服务器数据的回调函数
  • 使用open()方法与web服务器建立连接
  • 使用send()方法对服务器发送XHR请求
  • 在回调函数中接收web服务器返回的数据

首先建立 XMLHttpRequest 对象,目的是需要一个包含功能的对象实例去使用Javascript去向服务器发送 HTTP 请求

const httpRequest = new XMLHttpRequest();

发送请求后就会有响应。此时,需要告诉 XMLHttpRequest 对象哪个Javascript函数去处理响应,并设置了对象的 onreadystatechange 属性后给它命名,当请求状态改变时调用函数

function handler() {
  // 在这里处理服务器响应。
}

httpRequest.onreadystatechange = handler;//引用赋值给函数

要注意的是,函数名后没有括号和参数,因为这是把一个引用赋值给了函数,而不是真正的调用了它。

接下来,声明当你接到响应后要做什么,你要通过调用 HTTP 请求对象的 open()send() 方法发送一个实际的请求,像下面这样:

httpRequest.open("GET", "http://www.example.org/some.file", true);
httpRequest.send();

open() 的参数主要采用 请求方法 + url,最后一个true是一个可选项,用于设置请求是否是异步的。如果设为 true(默认值),即开启异步

send() 方法的参数可以是任何你想发送给服务器的内容,如果是 POST 请求的话。发送表单数据时应该用服务器可以解析的格式

发送请求时,你提供的 Javascript 函数名负责处理响应,下文中的nameOfTheFunction可以视为第一步的handler

httpRequest.onreadystatechange = nameOfTheFunction;

这个函数应该做什么?首先,函数要检查请求的状态。如果状态的值是 XMLHttpRequest.DONE (对应的值是 4),意味着服务器响应收到了并且是没问题的,然后就可以继续执行。

if (httpRequest.readyState === XMLHttpRequest.DONE) {
  // 很好,服务器已经接收到了响应。
} else {
  // 还没准备好。
}

对于XMLHttpRequest.DONE的状态码,如下所示:

  • 0(未初始化)或(请求还未初始化
  • 1(正在加载)或(已建立服务器链接
  • 2(已加载)或(请求已接收
  • 3(交互)或(正在处理请求
  • 4(完成)或(请求已完成并且响应已准备好

接下来,检查 HTTP 响应的响应状态码。在下面的例子中,我们通过检查响应码 200 OK 判断 AJAX 调用有没有成功。

if (httpRequest.status === 200) {
  // 完美!
} else {
  // 请求有问题。
  // 比如,响应可能是 404 (Not Found)
  // 或 500 (Internal Server Error) 响应码。
}

HTTP 响应状态码用来表明特定 HTTP 请求是否成功完成。 响应被归为以下五大类:

  1. 信息响应 (100–199)
  2. 成功响应(200–299)
  3. 重定向消息(300–399)
  4. 客户端错误响应 (400–499)
  5. 服务端错误响应 (500–599)

想了解更多的小伙伴看这篇 响应状态码

标签:HTTP,浅谈,请求,响应,AJAX,服务器,页面
From: https://www.cnblogs.com/meloo/p/17770996.html

相关文章

  • 浅谈分布式事务及解决方案
    1背景在讲述分布式事务的概念之前,我们先来回顾下事务相关的一些概念。1.1事务的基本概念就是一个程序执行单元,里面的操作要么全部执行成功,要么全部执行失败,不允许只成功一半另外一半执行失败的事情发生。例如一段事务代码做了两次数据库更新操作,那么这两次数据库操作要么全部......
  • 浅谈分布式事务及解决方案 | 京东物流技术团队
    1背景在讲述分布式事务的概念之前,我们先来回顾下事务相关的一些概念。1.1事务的基本概念就是一个程序执行单元,里面的操作要么全部执行成功,要么全部执行失败,不允许只成功一半另外一半执行失败的事情发生。例如一段事务代码做了两次数据库更新操作,那么这两次数据库操作要么全部执行......
  • 浅谈 33 台 iPad 发展史;OpenAI“悄悄”修改了企业核心价值观丨 RTE 开发者日报 Vol.67
      开发者朋友们大家好:这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE (RealTimeEngagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,......
  • 浅谈MDK, IAR,CLANG和GCC的局部变量字节对齐处理差异(2023-10-13)
    视频:https://www.bilibili.com/video/BV1CB4y1Z7kA问题由来:早期这个帖子里面的局部变量对齐仅测试了MDKAC5,但项目中使用AC6发现了新问题,看来AAPCS规约研究的还是不够细:https://www.armbbs.cn/forum.php?mod=viewthread&tid=109400当时对局部变量的描述如下:局部变量使用的是......
  • 原始ajax、XSS注入ajax
    一、原始的ajax<%@pagecontentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><title>ajax</title></head><body><!--http://127.0.0.1:9999/aja......
  • Ajax
    AsynchronousJavaScriptAndXML,异步的JavaScript和XML数据交换:通过Ajax给服务器发送请求,并获取服务器响应的数据异步交互:可以不重新加载整个页面情况下与服务器交换数据并更新部分网页XMLHttpRequest对象属性属性描述onreadystatechange定义readystate属性发生变......
  • 浅谈 Angular 引入 Transfer State 机制的动机
    在Angular之中,TransferState是一个用于在服务器端渲染(SSR)中传递状态的机制。它可以解决应用程序的一些重要问题,比如性能问题和用户体验问题。在这篇文章中,我将详细解释TransferState的概念,工作原理以及如何在Angular应用程序中使用它。首先,我们需要了解什么是服务器......
  • 浅谈深拷贝和浅拷贝
    深拷贝和浅拷贝深拷贝importcopylist1=[1,2,3,4,[5,6,7]]list2=copy.deepcopy(list1)print(list1)print(list2)[1,2,3,4,[5,6,7]][1,2,3,4,[5,6,7]]list1[0]+=1print(list1)print(list2)[2,2,3,4,[5,6,7]][1,2,3,4,[5,6,7]]list1[4]......
  • 浅谈视频智能分析预警 事件识别算法硬件智能分析网关V2版的功能 及其智能分析网关V1版
    智能分析网关V1版本和智能分析网关V2版本相比,不仅在硬件外观上有所改变,而且在算法类别上也增加了一些新的内容。因此,今天我们将重点介绍智能分析网关V2版本的相关特性。智能分析网关V2是一种先进的数据处理设备,它融合了云计算、物联网和人工智能技术,主要应用于工业生产环境中......
  • 浅谈locust 性能压测使用
    1.基本介绍Locust是一个开源的负载测试工具,用于模拟大量用户并发访问一个系统或服务,以评估其性能和稳定性。编写语言为Python,可通过Python来自定义构建性能压测场景脚本。Locust支持分布式负载测试,可以通过多个机器协同工作来模拟大量用户并发访问。并提供了一个Web界面,可以实......