浅谈js的ajax的异步和同步请求的问题
先来看以下代码:
var flag=true;
var index=0;
$.ajax({
url: "www.jb51/",
success: function(data){
flag=false;
}
});
while(flag){
index++;
}
alert(index);
请问最后alert的index的结果是多少?
可能有⼈会说0呗。实际上却没那么简单。⼤家可以⾃⼰试试看。可以看到最终程序进⼊了⼀个死循环!怎么会这样呢!
我们在看⼀段代码:
var flag=true;
$.ajax({
url: "www.jb51/",
success: function(data){
flag=false;
发送ajax请求的步骤}
});
alert(flag);
⼤家看最后alert出flag的值是多少呢?没错,是true!为什么呢?明明我们在ajax请求成功了将flag设为false,怎么还是true 呢?这实际上是Ajax的异步机制造成的。
这⾥解释⼀下,同步和异步。js是单线程的,由于执⾏ajax请求会消耗⼀定的时间,甚⾄出现了⽹络故障⽽迟迟得不到返回结果;这时,如果同步执⾏的话,就必须等到ajax返回结果以后才能执⾏接下来的代码,如果ajax请求需要1分钟,程序就得等1分钟。如果是异步执⾏的话,就是告诉ajax代码“⽼兄,既然你迟迟不返回结果,我先不等你了,我还有⼀⼤堆代码要执⾏,等你执⾏完了给我说⼀下”。
Ajax默认是异步请求的,所以就出现了上⾯我们看到的结果。也就是ajax⾥⾯的代码还没有执⾏完,先执⾏了下⾯的代码。那么如何使Ajax执⾏同步请求呢?这就需要设置async。
代码如下:
var flag=true;
var index=0;
$.ajax({
url: "www.jb51/",
async:false,
success: function(data){
flag=false;
}
});
while(flag){
index++;
}
alert(index);
async默认是true,也就是异步,我们设置为false,即为同步。这时我们再看看结果吧。
以上就是⼩编为⼤家带来的浅谈js的ajax的异步和同步请求的问题全部内容了,希望⼤家多多⽀持~