jQuery-关于Ajax请求async属性的说明及总结
在jquery的ajax中如果希望实现同步或者异步,我们可以设置async(默认true,表示异步请求),下面举例说明两种请求方式的区别。
1.后台代码
public JsonResult GetData(int number)
{
return Json(number);
}
2.前台异步请求
for (let i = 0; i < 5; i++) {
console.log('遍历索引:' + i);
$.ajax({
type: 'get',
url: '/Applys/GetData',
async: false,//异步(默认)
data: {
'number': i
},
success: function (data) {
console.log('请求结果:' + data);
}
});
}
/*
遍历索引: 0
遍历索引: 1
遍历索引: 2
遍历索引: 3
遍历索引: 4
请求结果: 3
请求结果: 2
请求结果: 1
请求结果: 0
请求结果: 4
*/
说明:在这里,async默认的设置值为true,这种情况为异步方式。当ajax发送请求后,在等待server端返回的这个过程中,前台会继续执行ajax块后面的脚本(循环会继续),直到server端返回正确的结果才会去执行success,也就是说这时候执行的是多个线程,每一次ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程)。循环速度远远大于ajax请求server的速度,在第1个ajax请求server输出data之前,循环就已经进行完了,所以程序会优先输出0,1,2,3,4。由于每一次ajax请求server所用时间不同,而且先请求的并不一定先得到返回结果,所以最终输出data的顺序是不可预测的。
3.前台同步请求
for (let i = 0; i < 5; i++) {
console.log('遍历索引:' + i);
$.ajax({
type: 'get',
url: '/Applys/GetData',
async:false,//同步
data: {
'number': i
},
success: function (data) {
console.log('请求结果:' + data);
}
});
}
/*
遍历索引:0
请求结果:0
遍历索引:1
请求结果:1
遍历索引:2
请求结果:2
遍历索引:3
请求结果:3
遍历索引:4
请求结果:4
*/
说明:在这里,async默认的设置值为false,这种情况为同步方式。已同步方式发出ajax请求后,面里所有的代码停止加载,页面出去假死状态,当这个ajax执行完毕后才会继续运行其他代码,页面假死状态解除。在示例中,第1次循环后输出0,然后进入第1个ajax请求。这个时候,循环暂停,直到ajax请求完毕才会进入第2步循环。先请求的一定先得到返回结果,所以最终输出data的顺序是可预测的。
总结
1.需要控制ajax请求返回结果顺序时,使用同步请求;在ajax请求时需锁住浏览器时,使用同步请求。
2.在MVC页面中,多个PartialView(分部视图)同时加载,一般使用异步请求。一个原因是分部视图加载顺序不分先后,另一个原因是即使有一个分部视图加载失败也不会影响其他视图的加载。
3.声明一个变量,需要ajax请求server对其赋值,一定要用同步请求锁住浏览器,否则在使用变量时,变量的值可能是undefined。
jQuery-关于Ajax请求async属性的说明及总结的更多相关文章
- $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )
$.ajax()方法详解 jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...
- jQuery发送ajax请求
利用jquery发送ajax请求的几个模板代码. $.ajax({ async : false, type: 'POST', dataType : "json", url: &qu ...
- Jquery发送ajax请求以及datatype参数为text/JSON方式
Jquery发送ajax请求以及datatype参数为text/JSON方式 1.方式一:datatype:'text' 2.方式二:datatype:'JSON' 3.使用gson-1.5.jar包 ...
- jquery中ajax请求后台数据成功后既不执行success也不执行error解决方法
jquery中ajax请求后台数据成功后既不执行success也不执行error,此外系统报错:Uncaught SyntaxError: Unexpected identifier at Objec ...
- jQuery发送Ajax请求以及出现的问题
普通jQuery的Ajax请求代码如下: $.ajax({ type: 'POST', url: "http://xxx/yyy/zzz/sendVerifyCode", data ...
- Sping MVC不使用任何注解处理(jQuery)Ajax请求(基于XML配置)
1. Spring Spring框架是一个轻量级的解决方案,是一个潜在的一站式商店,用于构建企业就绪的应用程序.Spring框架是一个Java平台,为开发Java应用程序提供全面的基础架构支持.Spr ...
- Struts2处理(jQuery)Ajax请求
1. Ajax Ajax(Asynchronous JavaScript and XML,异步JavaScript和XML)时一种创建交互式网页应用的网页开发技术,它并不是一项新的技术,其产生 ...
- Servlet处理(jQuery)Ajax请求
1. jQuery jQuery是一个JavaScript函数库,极大的简化了JavaScript编程,很容易学习.jQuery是目前最流行的开源js框架,并且提供了大量的扩展. 2. Aja ...
- JQuery发送ajax请求不能用数组作为参数
JQuery发送ajax请求不能用数组作为参数,否则会接收不到参数, 一.js代码如下: $('#delete-button').click(function(){ var select ...
随机推荐
- 笔记本制作centos qcow2格式文件
笔记本win7先通过vbox安装好centos6.5 然后打开cmd命令行在c:\Program Files\Oracle\VirtualBox下执行 vboxmanage clonehd --for ...
- solr之高级查询--联表 join查询
例如有两个业务表:文章表,评论表 . 场景: 一个文章可以由多个人评论. 创建两个core,一个core叫article,一个叫comment.article实例的schema.xml文件中定义几个简 ...
- springcloud(五) Hystrix 降级,超时
分布式系统中一定会遇到的一个问题:服务雪崩效应或者叫级联效应什么是服务雪崩效应呢? 在一个高度服务化的系统中,我们实现的一个业务逻辑通常会依赖多个服务,比如:商品详情展示服务会依赖商品服务, 价格服务 ...
- go语言数组与切片比较
一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式:[length]Type .[N]Type{value1, value2, . ...
- [代码][deque容器练习]打分案例
案例要求: //打分案例(sort算法排序)//创建5个选手(姓名.得分),十个评委对五个选手进行打分//得分规则:去除最高分,去除最低分,取出平均分//按得分对5个选手进行排名 源代码: //打分案 ...
- leetcode58
public class Solution { public int LengthOfLastWord(string s) { s = s.Trim(); || s.Trim().Length == ...
- 一劳永逸解决VLC播放中文字幕乱码问题
VLC对于Mac/Ubuntu用户来说算得上是必备软件.其相当于PC机上的“暴风影音”,但Mac/Ubuntu的新手使用VLC播放avi时都会碰 到字幕乱码的问题.avi字幕的格式有多种,这里假设你使 ...
- kafka启动报java.net.UnknownHostException
kafka启动报java.net.UnknownHostException 参考资料: 1.https://blog.csdn.net/zdxiq000/article/details/6258765 ...
- CWinApp: The Application Class
[CWinApp: The Application Class] An application built on the framework must have one and only one o ...
- mybatis使用foreach进行批量插入和删除操作
一.批量插入 1.mapper层 int insertBatchRoleUser(@Param("lists") List<RoleUser> lists);//@Pa ...