Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >详解Ajax请求(四)——多个异步请求的执行顺序

详解Ajax请求(四)——多个异步请求的执行顺序

作者头像
全栈程序员站长
发布于 2022-07-08 01:54:54
发布于 2022-07-08 01:54:54
2.8K00
代码可运行
举报
运行总次数:0
代码可运行

  首先提出一个问题:点击页面上一个按钮发送两个ajax请求,其中一个请求会不会等待另一个请求执行完毕之后再执行?

  答案是:不会,这两个异步请求会同时发送,至于执行的快与慢,要看响应的数据量的大小及后台逻辑的复杂程度。

从异步请求的执行原理来看,我们知道当一个异步请求发送时,浏览器不会处于锁死、等待的状态,从一个异步请求发送到获取响应结果的期间,浏览器还可以进行其它的操作。这就意味着多个异步请求的执行时并行的。

  下面我们还是从一个例子来看一下这个问题。

  要求:ajax1从后台请求下拉列表的数据,ajax2从后台请求下拉列表要选中的某一项的数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input type="button" value="测试按钮" onclick="sentAjax();"/><br> <select id="selectClassify" style="width: 100px;"></select>

js代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
function sentAjax(){ Ajax1();  Ajax2(); } function Ajax1(){ $.ajax({ cache : false, url:"<%=basePath%>/manager/test/ajax1", success: function(result){ alert("Ajax1"); $("#selectClassify").html(""); var html = ""; var selectJson = result.downList; $.each(selectJson, function(i, item) { html = html+"<option value='" + item + "'>" + item + "</option>"; }); $("#selectClassify").append(html);  }  }); } function Ajax2(){ $.ajax({ cache : false, url:"<%=basePath%>/manager/test/ajax2", success: function(result){ alert("Ajax2"); $("#selectClassify").val(result.kind); } }); } </script>

java代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Controller
@RequestMapping("/manager/test") public class TestAjax { @ResponseBody @RequestMapping("/ajax1") public Map<String ,String[]> ajax1(){ Map<String ,String[]> jsonMap = new HashMap<String, String[]>(); String[] downList = new String[2000]; //这里为了说明ajax2不会等待ajax1执行完之后再执行,让ajax1响应的数据量较大。 for(int i = 0;i < 2000;i++){ downList[i] = "<---"+ (i+1) + "--->"; } jsonMap.put("downList", downList); return jsonMap; } @ResponseBody @RequestMapping("/ajax2") public Map<String ,String> ajax2(){ Map<String ,String> jsonMap = new HashMap<String, String>(); jsonMap.put("kind", "<---7--->"); return jsonMap; } }

  点击测试按钮我们发现alert(“Ajax2”)先于alert(“Ajax1”)弹出,说明Ajax2没有等待Ajax1,异步请求是并行的,执行的快与慢,要看响应的数据量的大小及后台逻辑的复杂程度。而且有一个现象是:最后下拉框显示的是

  ajax2请求的下拉列表要选中的某一项的数据没有展示出来,这说明ajax2对页面的操作快于ajax1,这时ajax1对页面的操作还没开始,所以导致ajax2对页面的操作没有效果。

要解决这个问题也不难,这里提供两种解决方案:

  (1)Ajax2()方法的执行放到Ajax1()的success回调函数的最后一行。

  (2)Ajax1()的异步请求方法中,增加一个回调函数 :complete : Ajax2 亲测可行

  (3)当然针对这个问题而言还有很多解决办法,比如下拉列表采用同步的方式来画,而数据的回显使用异步,或者一个异步请求把所有数据返回,然后按照逻辑顺序进行数据展示,这些就不再本文的讨论范围内了。

  参考文章:http://www.w3school.com.cn/jquery/ajax_ajax.asp

  最后说一点,我们作为程序员,研究问题还是要仔细深入一点的。当你对原理了解的有够透彻,开发起来也就得心应手了,很多开发中的问题和疑惑也就迎刃而解了,而且在面对其他问题的时候也可做到触类旁通。当然在开发中没有太多的时间让你去研究原理,开发中要以实现功能为前提,可等项目上线的后,你有大把的时间或者空余的时间,你大可去刨根问底,深入的去研究一项技术,为觉得这对一名程序员的成长是很重要的事情。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/112651.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年11月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JQuery实现AJAX异步提交
文章目录 1. JQuery实现AJAX异步提交 1.1. 准备 1.2. $.ajax({}) 1.2.1. 格式 1.2.2. 实例 1.3. $.get() 1.3.1. 格式 1.3.2. 实现 1.4. $.post 1.4.1. 格式 1.4.2. 实现 JQuery实现AJAX异步提交 准备 点击下载JQurery的文件 添加JQuery的文件: <script type="text/javascript" src="文件路径"></script> $.ajax({}) 格式 其中的url
爱撒谎的男孩
2019/12/31
3.3K0
SpringBoot 2.xECharts+AJAX实现异步数据加载
1、JavaBean package cn.hadron.eba.bean; import java.io.Serializable; public class UserBean implements Serializable{ private String username; private Double salary; public UserBean(){} public UserBean(String username,Double salary){
程裕强
2019/05/27
8010
Dom与Jquery的ajax
DOM是文档对象模型(Document Object Model,简称DOM) jQuery是一个JavaScript 库,极大地简化了JavaScript编程。
全栈程序员站长
2022/08/04
5410
SpringMVC-06 Ajax
1、新建一个module :springmvc05-Ajax , 导入web支持!
张小驰出没
2021/04/15
1.1K0
SpringMVC-06  Ajax
PROMISE解决AJAX中的串行和并行
ALL中存放的是多个PROMISE实例(每个实例管理着一个异步的操作),执行all方法返回的是一个新的PROMISE实例
HelloWorldZ
2024/03/20
620
PROMISE解决AJAX中的串行和并行
ajax发送异步请求四个步骤,深入理解ajax异步请求的五个步骤(详细代码)
在前端工作中,经常会用到ajax,其实很多人只知道ajax是异步请求,不知道应该如何用它,它的基本步骤有哪些,ajax请求过程是怎样的?接下来这篇文章就给大家介绍Ajax的请求步骤,以及ajax请求步骤的详细代码。感兴趣的朋友可以看看。
全栈程序员站长
2022/08/27
1.7K0
SpringMVC—Ajax使用
Ajax的核心是XMLHttpRequest对象(XHR){内置对象},XHR为服务器发送请求和解析服务器响应提供了接口,能够以异步方式从服务器获取新数据
Java架构师必看
2021/05/14
1.7K0
SpringMVC—Ajax使用
SpringMVC添加异步请求支持
注意web.xml应用需在所有的servlet和filter配置加上<async-supported>true</async-supported>
Meet相识
2018/09/12
2.5K0
SpringMVC添加异步请求支持
promise执行顺序面试题令我头秃,你能作对几道
最近在复习 Promise 的知识,所以就做了一些题,这里挑出几道题,大家一起看看吧。
loveX001
2022/10/01
4480
Ajax详解
作为资深球迷,提起Ajax,第一反应想到的是阿贾克斯,那个曾培养出伊布,范德法特,苏亚雷斯,亨特拉尔等一众球星的荷甲著名球队。
南风
2019/04/22
1.1K0
Ajax详解
Ajax的简单使用,小白必看
Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。
一写代码就开心
2020/11/19
5540
Ajax的简单使用,小白必看
JavaWeb——AJAX异步技术实现方式与案例实战(原生的JS方式、使用JQuery方式)
AJAX是一门很重要的技术,主要作用就是增强用户的体验。AJAX全名为:ASynchronous JavaScript And XML,异步的JavaScript和XML。其中同步和异步的差异,以客户端向服务器发送请求及服务器响应的过程,简单说明下:
Winter_world
2020/09/25
3.9K0
JavaWeb——AJAX异步技术实现方式与案例实战(原生的JS方式、使用JQuery方式)
小白需懂的异步请求的处理
在我们传统的服务中,当一个HTTP请求过来时,tomcat或者是其他的中间件都会有一个主线程来处理请求,所有的业务逻辑都会在这个线程里面处理完,最后会给出一个响应。由于我们的tomcat所管理的线程数是有限的,当线程到达一定程度后,再有请求过来将会无法去处理了。
用户7386338
2020/05/29
2.1K0
base64编码图片数据存储服务器
我在刚开始接触base64编码图片数据时,就是把base64编码图片数据传到后台来解码生成图片。导致生成的图片无法打开,后来才发现其实传到后台的base64编码根本就不完整,导致解码出现问题,无法显示图片。所以,base64编码只能在前端处理。
全栈程序员站长
2022/07/29
1.8K0
Ajax从入门到静态发展
所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。
用户9184480
2024/12/13
1090
前后台交互经常使用的技术汇总(后台:Java技术,前台:Js或者Jquery)
该文章介绍了如何通过Java代码方式实现微信支付功能。主要包括了创建订单、查询订单、取消订单和退款订单等功能。同时,也介绍了如何通过Java代码实现后台服务器与微信服务器之间的交互,包括获取openid、生成二维码、发起请求和接收响应等功能。此外,还介绍了如何通过Java代码实现微信支付功能,包括创建订单、查询订单、取消订单和退款订单等功能。
别先生
2018/01/02
5.3K0
前后台交互经常使用的技术汇总(后台:Java技术,前台:Js或者Jquery)
ajax跨域问题以及解决方案_js跨域请求的三种方法
鼠标离开用户名输入框时,检查是否符合要求,如果为空,则给提示,如果不为空,则异步查询数据库,后返回结果;
全栈程序员站长
2022/09/23
3.5K0
ajax跨域问题以及解决方案_js跨域请求的三种方法
springmvc和ajax的全部例子 原
function jajax1() { var reqdata = { p1:'success' } $.ajax({ url: '/testreq/jsonreq', type: 'get',//请求方式,get或post async: true,//如果async设置为:true,则不会等待ajax请求返回的结果,会直接执行ajax后面的语句,,默认为true异步 contentType: 'app
stys35
2019/03/05
9430
SpringMVC 操作Ajax使用学习笔记整理;
Ajax 其实之前,学习JS 时候了解过~ 也在 OneNote 上整理了笔记: 因此 这里可能会有一些跳跃~ (我又太懒了…最近每天抽出两小时开始减肥~~笔记就有点松懈了…) 如果 有疑惑可以click. 这里下载本人以前对Ajax的学习资源~;
Java_慈祥
2024/08/06
1350
SpringMVC 操作Ajax使用学习笔记整理;
Springmvc响应Ajax请求(@ResponseBody)
Springmvc响应Ajax请求(@ResponseBody) 本人独立博客https://chenjiabing666.github.io 创建工程 创建maven project 选择war包 自动生成web.xml Target Runtime 选择 Tomcat 添加依赖pom.xml <dependencies> ​ <!-- SpringMVC --> <dependency> <groupId>org.springframewor
爱撒谎的男孩
2018/05/10
9.7K5
Springmvc响应Ajax请求(@ResponseBody)
相关推荐
JQuery实现AJAX异步提交
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验