【jQuery】(7)---jQueryAjax同步异步区别

时间:2023-01-23 19:54:37

jQueryAjax同步异步

今天在项目开发过程中,要实现这么一个功能

<!-- 当我点击就业的时候,触发onclick时间,check()方法里通过ajax请求返回数据,
如果该用户已经毕业可以跳转到job.html如果没有毕业不能跳转页面同时弹框提示 -->
<a href="job.html" onclick="return check()">就业</a>

我们都知道onclick是优先执行于href属性的,只有onclick返回true才会执行href。接下来看js怎么写的

 function check(){
var fal=false;
$.post("URL", function(date){
if(date==null || date==""){
fal=true;
return fal;//其实这个return也只是返回ajax中function的返回值。而不是check()的返回值
}else{
alert("请先毕业才能就业")
}
}) return fal;
/*最终发现如果该用户已经毕业,a标签没有任何反应,
如果还没有毕业,会提示:请先毕业才能就业。界面也是没有反应*/
}

这就很纳闷了,明明返回数据是空,fal变成了ture,怎么最终返回还是false。这就是同步和异步的区别了。

首先,ajax默认情况下是异步的,那什么是异步呢

async默认的设置值为true,这种情况为异步方式,就是说当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程)

js举例:

    $(function() {
$.ajax({
type : 'post',
async : true,
url : '',
cache : false,
data : {},
success : function(data){
alert("1111");
}
});
alert("22222");
});
/*在这里方法中,因为它是异步的,所以它在通过ajax向后端交互的同时,它还会向下执行js代码,就相当于有两个线程
所以这里是会先弹出"2222",才会弹出"1111",到这个时候,才知道为什么上面js为什么总是返回false,因为异步的时候
它先执行了下面的return fal,就已经返回flase了*/

所以我们只要把async的属性值改为false就变成同步了

$.post没有这个同步异步设置 ,如果一定要设置异步,只能在执行$.post之前加$.ajaxSettings.async = false; (同步执 
行)

所以把最上面js改成同步,就可以实现相关功能了

    function check(){
var fal=false;
$.ajax({
type: "POST",
url: "url",
async:false, //同步方式
success: function(re){
if(re==null||re==""){
fal=true;
}else{
alert("请先毕业才能就业");
}
}
});
return fal;
}

同步和异步的区别

简单理解:同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除。 
而异步则这个AJAX代码运行中的时候其他代码一样可以运行。

异步:在异步模式下,当我们使用AJAX发送完请求后,可能还有代码需要执行。这个时候可能由于种种原因导致服务器还没有响应我们的请求,但是因为我们采用了异步执行方式,所有包含AJAX请求代码的函数中的剩余代码将继续执行。如果我们是将请求结果交由另外一个JS函数去处理的,那么,这个时候就好比两条线程同时执行一样。

同步:在同步模式下,当我们使用AJAX发送完请求后,后续还有代码需要执行,我们同样将服务器响应交由另一个JS函数去处理,但是这时的代码执行情况是:在服务器没有响应或者处理响应结果的JS函数还没有处理完成return时,包含请求代码的函数的剩余代码是不能够执行的。就好比单线程一样,请求发出后就进入阻塞状态,知道接触阻塞余下的代码才会继续执行。

如果哪里理解不到位,或者理解错了,欢迎指点。

想的太多,做的太少,中间的落差就是烦恼,要么去做,要么别想 少尉【17】

【jQuery】(7)---jQueryAjax同步异步区别的更多相关文章

  1. 几种IO情况的学习和总结 关于 &equals;&equals;&equals;&equals;&equals;阻塞&sol;非阻塞以及同步&sol;异步区别

    同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 背景是Linux环境下的network IO. 在进行解释 ...

  2. jquery的ajax同步异步执行

    大家先看一段简单的jquery ajax 返回值的js 代码 function getReturnAjax{  $.ajax({    type:"POST",    http:/ ...

  3. pythonのgevent同步异步区别

    #!/usr/bin/env python from urllib import request import gevent from gevent import monkey import time ...

  4. 【转载】高性能IO设计 &amp&semi; Java NIO &amp&semi; 同步&sol;异步 阻塞&sol;非阻塞 Reactor&sol;Proactor

    开始准备看Java NIO的,这篇文章:http://xly1981.iteye.com/blog/1735862 里面提到了这篇文章 http://xmuzyq.iteye.com/blog/783 ...

  5. js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快、简单 post:安全,量大,不缓存)(服务器同步和异步区别:同步:等待服务器响应当中浏览器不能做别的事情)(ajax和jquery一起用的)

    js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快.简单 post:安全,量大,不缓存)( ...

  6. ajax中的async属性值之同步和异步及同步和异步区别

    jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项目中会用到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里 ...

  7. 同步与异步区别,Invoke与BeginInoke的区别

    先说同步与异步的区别,总说同步异步的,其实一直不清楚什么是同步异步,今天找了一下: 同步:当一个消息发送后,等对方回应后继续发送下一条指令. 异步:当一个消息发送后,不等对方回应就发送下一条. 同步, ...

  8. java中同步异步阻塞和非阻塞的区别

    同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回. 按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等).但是一般而言,我们在说同步.异步的时候,特 ...

  9. 哪5种IO模型?什么是select&sol;poll&sol;epoll?同步异步阻塞非阻塞有啥区别?全在这讲明白了!

    系统中有哪5种IO模型?什么是 select/poll/epoll?同步异步阻塞非阻塞有啥区别? 本文地址http://yangjianyong.cn/?p=84转载无需经过作者本人授权 先解开第一个 ...

随机推荐

  1. 测试Javacript里的checkbox是否被选中的status和checked的替换方法

    测试Javacript里的checkbox是否被选中的status和checked的替换方法,checkbox.checked和checkbox.status的功能一样,注意checkbox.stat ...

  2. Microsoft Visual Studio 2010 已安装的模板 没有 &OpenCurlyDoubleQuote;ADO&period;NET实体数据模型”

    2010 sp1才包括entity framework. 装一个补丁即可 地址为:http://www.microsoft.com/zh-CN/download/details.aspx?id=236 ...

  3. Windows游戏编程之从零开始d

    Windows游戏编程之从零开始d I'm back~~恩,几个月不见,大家还好吗? 这段时间真的好多童鞋在博客里留言说或者发邮件说浅墨你回来继续更新博客吧. woxiangnifrr童鞋说每天都在来 ...

  4. 五&period;Bash Shell编程基础入门实战

    知识回顾 运行脚本我们一般用sh 不用单独去加执行权限 OLDBOY=10只适用当前环境 局部变量 export OLDBOY把它设置为临时的环境变量应为已经=10了所以不用export OLDBOY ...

  5. C&num; 8&period;0、&period;NET Framework 4&period;8与NET Standard 2&period;1的一个说明

    C# 8.0..NET Framework 4.8与NET Standard 2.1的一个说明 https://blog.csdn.net/sD7O95O/article/details/846098 ...

  6. 从官网下载指定版本的JDK

    从官网下载指定版本的JDK 一.百度搜索jdk,进入最新版Downloads界面 百度搜索jdk,或者jdk下载,点击进入jdk官网最新版本下载界面,可以看到当前最新版本为jdk12 二.找到JDK历 ...

  7. JavaScript--DOM进阶&lpar;20&rpar;

    // DOM自身存在很多类型,在上一章中有介绍,比如Element类型:表示的是元素节点;再比如Text类型;表示的是文本节点; 一 DOM类型 类型名 说明 Node 表示所有类型值的统一接口,IE ...

  8. Nginx模块之Nginx-Ts-Module学习笔记(一)抢险体验

    1.通过HTTP接收MPEG-TS2.生产和管理Live HLS 3.按照官方的编译和配置,当然了我是第一次编译没有通过,在作者重新调整下,编译成功,感谢:@arut https://github.c ...

  9. db2 托管事务未设置方法有问题

    https://q.cnblogs.com/q/63862

  10. 解决 windows10和ubuntu16&period;04双系统下时间不对的问题