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 ...
随机推荐
- Java遍历一个目录下的所有文件
Java遍历一个目录下的所有文件 Java工具中为我们提供了一个用于管理文件系统的类,这个类就是File类,File类与其他流类不同的是,流类关心的是文件的内容,而File类关心的是磁盘上文件的存 ...
- [转]js清除所有cookies
来源:http://blog.csdn.net/zzl1120/article/details/6592332 var cookies = document.cookie.split(";& ...
- SAFEARRAY
SAFEARRAY SafeArrayCreate SafeArrayDestroy // Specify the bounds: // -- dim. count = 2 // -- elemen ...
- HUAWEI手机解锁
1.关机:2.同时按上音量键和电源键,直至出现Android system recovery,按下音量键选择wipe date/factory reset->Yes-delete all use ...
- Redis的强大之处
[Redis的强大之处] 1.拥有对脚本的支持(此处是lua),脚本可选择性的缓存. 2.提供HyperLogLog计数器. 3.提供5种数据类型的全方位支持:List.Hash.Set.Ordere ...
- 股票F10
[股票F10] 股票非行情类的基本面资料统称为股票F10 在各种金融行情终端软件中,用户通过键盘上的F10快捷键,可迅速查看上市公司的非行情信息,诸如:公司概况.财务数据.公司公告.公司新闻.经营 ...
- Visual Studio C++ include与library
首先介绍几种目录: 1. 系统路径 系统路径在vc中是"Properties->Configuration Properties -> VC++ Directories" ...
- 获取set()和push()方法向值栈放的数据
------------------siwuxie095 获取 set() 方法向值栈放的数据 1.具体步骤 (1)在 Action 中使用 set() 方法向值栈放数据 (2)在 JSP 页面中从值 ...
- rabbitmq的简单介绍一
该博客的主要讲解了以下几种rabbitmq的用法1.实现简单的生产者发送消息给消费者2.实现序列持久化3.实现消息持久化4.实现消息公平分发5.实现广播6.实现组播7.实现细分组播 先来看下rabbi ...
- c语言蛋疼的字符串赋值
我觉得c语言比较蛋疼的一个地方就是给字符串赋值,不是初始化,是赋值. char string[20]={0}; 你不能通过 string="hello";这种方式赋值.但是在字符串 ...