Ajax基本原理与实现

article/2025/10/4 0:57:19

Ajax 的全称是Asynchronous JavaScript and XML(异步的JavaScript 和 XML),其中,Asynchronous 是 异步 的意思,它有别于传统web开发中采用的同步的方式。

        不是新的编程语言,而是一种使用现有标准的新方法。

        最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(局部刷新)

        AJAX运行环境:浏览器

        AJAX技术早就出现了,2005年google suggest项目采用Ajax技术,页面展示非常丰富效果,用户感受非常良好,使Ajax技术一夜爆红,到现在都是web开发中必不可少的技术之一!


1、关于同步和异步:客户端和服务器端相互通信的基础上
        异步传输是面向字符的传输,它的单位是字符;
        而同步传输是面向比特的传输,它的单位是桢,它传输的时候要求接受方和发送方的时钟是保持一致的。

        同步的话,必须这个操作完了才会执行下一步,在等待期间浏览器会挂起不能执行任何接下来的js代码;异步则是【告诉】浏览器去做,【告诉】是一瞬间的事情,然后就继续执行下一步了,等到结果返回来了,浏览器会通知js执行相应的回调。

2、Ajax工作原理

        Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发送异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。 Ajax请求,其实就是利用浏览器内核 模拟 表单提交,达到页面不刷新的效果,接收服务器的响应,实现局部更新。

3、Ajax请求:

        XMLHttpRequest:Ajax对象的核心(代表浏览器内核)        

        XMLHttpRequest对象:用于在后台与服务器交换数据,这意味着可以在不刷新整个网页的情况下,对网页的某部分进行更新。

<script>var xmlhttp;function init() {if (window.XMLHttpRequest){//  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码;创建XMLHttpRequest对象xmlhttp=XMLHttpRequest;}else{// IE6, IE5 浏览器执行代码;不存在,使用ActiveXObjectxmlhttp = new ActiveXObject("Microsoft.XMLHTTP")}}
</script>

向服务器发送请求:将请求发送到服务器,主要使用 XMLHttpRequest 对象的 open() 和 send() 方法:

        1、open() 有三个参数。第一个参数定义发送请求所使用的方法,第二个参数规定服务器端脚本的URL,第三个参数规定应当对请求进行异步地处理;

        2、send() 方法将请求送往服务器。

xmlhttp.open("GET","/jquery/ajaxServlet",true);
xmlhttp.send();

GET OR POST:

        与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用,但是在有些情况下,必须使用 POST 请求;【 Ajax请求,只能提交文本字符,所以像上传内容等功能,必须通过表单post提交】

function doGet(){xmlhttp.open("GET","/jquery/ajaxServlet",true);//未提交数据xmlhttp.open("GET","/jquery/ajaxServlet?fname=向&lname=洋",true);//已提交数据,异步xmlhttp.open("GET","/jquery/ajaxServlet?fname=向&lname=洋",true);//已提交数据,同步xmlhttp.send();
}
function doPost() {xmlhttp.open("Post","/jquery/ajaxServlet",true);//未提交数据xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");//已提交数据xmlhttp.send("fname=向&lname=洋");//上传文本字符;send(String)仅针对post请求,用来传递数据
}

4、Ajax响应

        responseText:获得字符串形式的响应数据。

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

5、Ajax事件

        onreadystatechange 事件:当请求被发送到服务器时,我们需要执行一些基于响应的任务,每当监听到ajax对象的readyState 值改变的行为时,就会触发 onreadystatechange 事件,eadyState 属性存有 XMLHttpRequest 的状态信息,下面是 XMLHttpRequest 对象的三个重要的属性:

        ajax 状态码 - xhr.readyState:是用来表示一个 ajax 请求的全部过程中的某一个状态只有当 readyState === 4 的时候,我们才可以正常使用服务端给我们的数据。

        onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务,当 readyState 等于 4 且状态为 200 时,表示响应已就绪:

xmlhttp.onreadystatechange=function() {// alert(xmlhttp.readyState);if (xmlhttp.readyState==4 && xmlhttp.status==200){// alert(xmlhttp.responseText);document.getElementById("resDiv").innerHTML=xmlhttp.responseText;//局部更新}
};

7、jquery Ajax:与Ajax本质没有任何区别。知识换了jquery语法进行了封装,便于使用

Jquery底层ajax实现。

原生JS实现:

<script>var xmlhttp;function init() {if (window.XMLHttpRequest) {//  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码//创建XMLHttpRequest对象xmlhttp=new XMLHttpRequest();}else {// IE6, IE5 浏览器执行代码//不存在,使用ActiveXObjectxmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}}//提交表单,页面不会有刷一下,用户感受提升//get方法通过?的方式传递数据,执行参数function doGet(){// xmlhttp.open("GET","/jquery/ajaxServlet",true);xmlhttp.open("GET","/jquery/ajaxServlet?fname=向&lname=洋",true);//异步请求// xmlhttp.open("GET","/jquery/ajaxServlet?fname=向&lname=洋",false);//状态变化注册xmlhttp.onreadystatechange=function() {// alert(xmlhttp.readyState);if (xmlhttp.readyState==4 && xmlhttp.status==200){// alert(xmlhttp.responseText);document.getElementById("resDiv").innerHTML=xmlhttp.responseText;//局部更新}};xmlhttp.send();// alert(xmlhttp.responseText);}function doPost() {xmlhttp.open("Post","/jquery/ajaxServlet",true);// xmlhttp.open("Post","/jquery/ajaxServlet",false);//false代表同步请求,一般不太使用,效率太低//异步请求:send将数据传输给浏览器,浏览器还没返回响应,主程序已经在执行下一句了,导致responseText为null//同步请求:send将数据传输给浏览器,浏览器返回响应后,主程序获取responseText的数据展示;一般不太使用,效率太低xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");//内容上传文本字符//状态变化注册xmlhttp.onreadystatechange=function() {// alert(xmlhttp.readyState);if (xmlhttp.readyState==4 && xmlhttp.status==200){// alert(xmlhttp.responseText);document.getElementById("resDiv").innerHTML=xmlhttp.responseText;//局部更新}}xmlhttp.send("fname=向&lname=洋");//send(String)仅针对post请求,用来传递数据// alert(xmlhttp.responseText);}
</script>

jQuery实现:        

        1、$.ajax()

        $("#jqueryAjax").click(function () {$.ajax({type: "get",url: "/jquery/ajaxServlet",data: "fname=John&lname=Boston",success: function(msg){alert( "Data Saved:::: " + msg );}});});

        2、$.get():发送get请求(ajax的简化)

                语法:$.get(url, [data], [callback], [type])

        $("#jqueryGet").click(function () {$.get("/jquery/ajaxServlet", { fname: "John", lname: "2pm" },function(data){alert("Data Loaded: " + data);});});

        3、$.post():发送post请求(ajax的简化)

                语法:$.post(url, [data], [callback], [type])

        $("#jqueryPost").click(function () {$.post("/jquery/ajaxServlet", { fname: "John", lname: "2pm" },function(data){alert("Data Loaded: " + data);});})


http://chatgpt.dhexx.cn/article/blruJK30.shtml

相关文章

总结 - Ajax工作原理和实现步骤

目录 一 Ajax技术与原理 1.1 Ajax简介 1.2 Ajax所包含的技术 1.3 Ajax的工作原理 1.4 XMLHttpRequest 对象的三个常用的属性 1. onreadystatechange 属性 2. readyState 属性 3. responseText 属性 1.5 xmlhttprequst的方法 1. open() 方法 2. send() 方法 二 Ajax…

迈瑞医疗软件测试笔试题

8月份去了面试。 一、测试设计题 题目:某手机软件中的通信数据&#xff0c;用户可在界面上进行浏览&#xff0c;并可选择想要的数据导出到U盘。如下图所示:请你对“导出”功能进行测试分析&#xff0c;提取测试点&#xff0c;并设计测试用例。&#xff08;界面大概如下所示&a…

软件测试笔试题

1、选择题 1、下列关于alpha测试的描述中正确的是&#xff08;BD&#xff09; A alpha测试需要用用户代表参加 B alpha测试不需要用用户代表参加 C alpha测试是系统测试的一种 D alpha测试是验收测试的一种 2、软件质量的定义&#xff08;D&#xff09; A 软件的功能性、可…

最近面试的软件测试笔试题笔试题(已整理参考答案)

1.常见的测试用例设计方法都有哪些&#xff1f;分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 1. 等价类划分 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值…

.Net 7 Native AOT 单文件 无依赖 跨平台

2022.11.18 Native AOT 正式发布&#xff0c;不再是 实验性项目。 .Net 7 Console App & WebApi 使用PublishAOT true&#xff0c;直接编译 成exe&#xff0c;无rutime依赖&#xff0c;智能裁剪&#xff0c;体积小&#xff0c;启动快。 环境&#xff1a; 1.更新VS2022 …

AOT和单文件发布对程序性能的影响

AOT和单文件发布对程序性能的影响 以前的.NET框架原生并不支持最终编译结果的单文件发布&#xff08;需要依赖第三方工具&#xff09; 1. 前言 这里先和大家介绍一下.NET一些发布的历史&#xff0c;以前的.NET框架原生并不支持最终编译结果的单文件发布&#xff08;需要依赖…

JIT与AOT

名词解释&#xff1a; JIT&#xff08;JUST - IN -TIME&#xff09;实时编译 AOT&#xff08;AHEAD-OF-TIME&#xff09;预先编译 它们两者最根本的区别&#xff0c;就在于编译代码的时机&#xff0c;所谓的编译代码&#xff0c;就是把人类写的代码&#xff0c;翻译成机器字节…

Spring6和SpringBoot3的新特性-你不得不了解的AOT原来这么简单

Spring6.0新特性 一、Spring的发展历史 二、AOT AOT是Spring6.0提供的一个新特性&#xff0c;Ahead of Time 提前编译。 1.AOT概述 1.1 JIT和AOT的关系 1.1.1 JIT JIT(Just-in-time) 动态编译&#xff0c;即时编译&#xff0c;也就是边运行边编译&#xff0c;也就是在程序运…

JIT VS AOT

一、AOT&#xff0c;JIT是什么 JIT&#xff0c;即Just-in-time,动态(即时)编译&#xff0c;边运行边编译&#xff1b;AOT&#xff0c;Ahead Of Time&#xff0c;指运行前编译&#xff0c;是两种程序的编译方式 理解 jit、aot 程序主要有两种运行方式&#xff1a;静态编译与动…

对比JIT和AOT,各自的优点与缺点

编译器和解释器是什么 编译器和解释器的区别在于是否编译和执行过程是否是同时进行。 编译器所干的事&#xff0c;将一门语言 X 编译为另一门语言 Y &#xff08;可以是语言 X、高级语言、低级语言等&#xff09;&#xff0c;整个编译过程涉及词法分析、语法分析、语义分析。…

AOT(超前编译)实例分析

文章目录 一、背景二、具体实施2.1 tfcomfile 是什么&#xff1f;2.2 tfcompile 的功能是什么&#xff1f;2.3使用tfcompile 三、总结 一、背景 前边已经了解了JIT和AOT的基本概念&#xff0c;AOT(提前编译)方式就是在代码执行阶段之前全部编译成目标指令&#xff0c;进入执行…

Java在云原生的破局利器——AOT(JIT与AOT)

导读 JIT&#xff08;Just-in-Time&#xff0c;实时编译&#xff09;一直是Java语言的灵魂特性之一&#xff0c;与之相对的AOT&#xff08;Ahead-of-Time&#xff0c;预编译&#xff09;方式&#xff0c;似乎长久以来和Java语言都没有什么太大的关系。但是近年来随着Serverles…

AOT概述

11.1、AOT概述 11.1.1、JIT与AOT的区别 JIT和AOT 这个名词是指两种不同的编译方式&#xff0c;这两种编译方式的主要区别在于是否在“运行时”进行编译 &#xff08;1&#xff09;JIT&#xff0c; Just-in-time,动态(即时)编译&#xff0c;边运行边编译&#xff1b; 在程序…

Python interpreter state is not initialized. The process may be terminated.

Error occurred when finalizing GeneratorDataset iterator: Failed precondition: Python interpreter state is not initialized. The process may be terminated. [[{{node PyFunc}}]] 当我在使用TensorFlow训练时&#xff0c;出现以上错误。 我也曾以为是&#xff…

subprocess.CalledProcessError: Command ‘[where, cl]‘ returned non-zero exit status 1

当运行程序时&#xff0c;程序报错最后一行错误输出为 subprocess.CalledProcessError: Command [where, c1] returned non-zero exit status 1时&#xff0c;我们把输出得错误往前翻看&#xff0c;如果&#xff0c;报错得第一行 是UserWarning: Error checking compiler vers…

Problem Solving Process of The terminal process terminated with exit code 1

参考前辈的配置VScode C/C环境的经验&#xff1a; 成成赐我力量 bat67 参考之后我的配置 c_cpp_properties.json "configurations": [{"name": "Mac","includePath": ["/usr/include"],"browse" : {"limitS…

compilation terminated.

wqlubuntu:~/Linux/COURSE$ gcc -o fork.c test.c gcc: error: test.c: No such file or directory gcc: fatal error: no input files compilation terminated.今天在编译一个文件时&#xff0c;发现了以上很诡异的情况&#xff08;貌似我平时也是这样编译的啊&#xff0c;&am…