jQuery的ajax async同步和异步介绍

项目中有这样一个需求,使用ajax加载数据返回页面并赋值,然后前端取出该值

这其中涉及到代码的顺序问题,有时后台还未返回数据,但已执行后面代码,

所以就会造成取不到值

$.ajax({
	type: "post",
	url: "admin/PfmOptionRuleItem.do",
	success: function(data){
		$("#ruleItem").val(data.ruleItem);  //①
	}
});
return $("#ruleItem").val();  //②

如果①还未从后台返回数据 此时执行②就获取不到值

 

Ajax的第一个字母是asynchronous的开头字母,这意味着所有的操作都是并行的,完成的顺序没有前后关系。

$.ajax()的async参数总是设置成true,这标志着在请求开始后,其他代码依然能够执行。

如果把这个选项设置成false,这意味着所有的请求都不再是异步的了,这也会导致浏览器被锁死。

虽然官方不建议这么干,只是不能用太多,否则会造成用户体验不佳

举个栗子

alert("setp 1");
$.ajax({
	  url: "admin/PfmOptionRuleItem.do",
	  async: false,
	  success: function(data){
		  alert("hello ajax"); //①
	  }
});
alert("setp 2"); //②

当把asyn设为false时,这时ajax的请求时同步的,也就是说,这个时候ajax块发出请求后,

他会等待在①这个地方,不会去向下执行②,直到①执行完毕

此时依次执行顺序为

setp 1

hello ajax

setp 2

如果async为true 则执行顺序为

setp 1

setp 2

hello ajax

作者:itmyhome

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://www.cnblogs.com/captainbed

原文地址:https://www.cnblogs.com/skiwnchqhh/p/10163914.html

时间: 2024-10-08 23:23:49

jQuery的ajax async同步和异步介绍的相关文章

jQuery中ajax的同步与异步

之前一直在写JQUERY代码的时候遇到AJAX加载数据都需要考虑代码运行顺序问题.最近的项目用了到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除. 而异步则这个AJAX代码运行中的时候其他代码一样可以运行. jquery的async:false,这个属性 默认是true:异步,false:同步. $.ajax({ type: "post", url: "

jquery的$.ajax async使用详解

async在jquery ajax中是一个同步参数了,我们下面来给大家介绍在jquery ajax中使用async时碰到的一些问题与方法介绍,希望例子能给各位同学带来一些帮助哦. async默认是true, 即为异步方式, $.Ajax执行后, 会继续执行ajax后面的脚步, 直到服务器端返回数据后, 触发$.Ajax里的success方法. 这时候执行的是两个线程. var temp; $.ajax({ async: false, type : "POST", url : defau

Ajax的同步与异步

之前做项目中有遇到就是Ajax的同步与异步的问题,由于Ajax的async默认的设置值为true,属于异步.这个时候就会出现一个问题,就是2段代码如果有关联的话其有一个先后顺序执行的问题,我的下面的代码就是属于这种情况,当时老纠结为什么不是自己预期的效果,后来将async的属性值改为false后,属于同步.运行终于达到了预期的效果,经历过后还得记下来总结经验:

$.ajax async同步加载

(默认: true) 默认设置下,所有请求均为异步请求.如果需要发送同步请求,请将此选项设置为 false.注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行. var temp; $.ajax({ async: false, type : "POST", url : defaultPostData.url, dataType : 'json', success : function(data) { temp=data; } }); alert(temp); 这个aja

ajax的同步 和 异步

摘的: 一. 同步和异步的理解实际很简单,同步就代表一个请求对应一个响应对象,只有当这个过程完整个结束后,下一个请求才能进来, 异步就是执行当前请求的同时,其他请求也可以执行,其实概念和多线程执行时差不多的! 二. ajxa:  不写 async .则默认是async:true  异步 三. 1 同步:提交请求->等待服务器处理->处理完毕返回这个期间客户端浏览器不能干任何事 2 异步:请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕 1.一心一意:当前只

extjs Ext.Ajax.request 同步和异步

ext3.x 不支持ajax的同步请求,ext4就开始支持. 1 Ext.Ajax.request({ 2 url : '', 3 sync:true, 4 params : { 5 name : text.getValue() 6 }, 7 success : function(response, options) { 8 var responseArray = Ext.util.JSON.decode(response.responseText); 9 resultValue=respons

JDK中关于BIO,NIO,AIO,同步,异步介绍

在理解什么是BIO,NIO,AIO之前,我们首先需要了解什么是同步,异步,阻塞,非阻塞.假如我们现在要去银行取钱: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写); 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API); 阻塞 : ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才返回); 非阻塞 :

Ajax的同步和异步调用

jquery的async:false,这个属性 默认是true:异步,false:同步. $.ajax({ type: "post", url: "path", cache:false, async:false, dataType: ($.browser.msie) ? "text" : "xml", success: function(xmlobj){ } }); 有了这个属性可以相对的减少代码运行书序问题,但是如果用的太多

ajax中同步和异步

一.async值为true (异步) 当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程) 例如 $.ajax({             type:"POST",            url:"Venue.aspx?act=init",            da