ajax同步、异步执行简单理解与证明

此理解范例代码来自前几篇随笔!

重在实际操作练习一下!!!!!

在$.ajax()中我们可以常常看到async,这就是来指定ajax同步异步的,需要记忆一下:

记忆方法:

  sync英语中的意思是:“同步”、“同步的”、“同步处理”

  前面加个“a”,构成async英文中的意思是:“异步”

  再者给他指定true和false那就容易理解了:

    1.     “async:true” 意思是:“异步”
    2.     “async:false” 意思是:“同步”

分析async作用:

当“async:true”时,也就是异步执行ajax,所以不管ajax数据是否已经加载完成,ajax后面的语句都要执行!

当“async:false”时,也就是同步执行ajax,这是指必须等ajax数据加载完成,才可以执行ajax后面的语句!

注意:这里的ajax数据加载是指“$.ajax( 数据传输代码 );”部分!

证明方法及说明:

我们可以利用javascript中的“alert();”来证明,大家都知道,当alert弹出一个警告框的话,不点击确定就不会运行接下来的程序,所以我们可以在“$.ajax();”后面写个alert,再在“$.ajax();”里的success回调函数中写一个alert。设置async的值来看看两个alert的执行情况就可以证明出来同步还是异步了!我们来试试...

下面举例代码说明:

  同步证明(async:false):

Model:

public class Model
    {
        public string rtoNumber { set; get; }
        public string approver { set; get; }
        public string modifier { set; get; }
        public string comment { set; get; }
    }

View:

<div id="container">
        <table id="table">
            <tr>
                <td><label>RTONumber</label><input name="rtoNumber" /></td>
                <td><label>Approver</label><input name="approver" /></td>
                <td><label>Modifier</label><input name="modifier" /></td>
                <td><label>Comment</label><textarea name="comment" cols="30" rows="4"></textarea></td>
            </tr>
        </table>
        <input id="submit" type="button" value="submit"/>
</div>

<script type="text/javascript">
        $(function () {
            $(‘#submit‘).click(function () {
                var model = [];
                var subModel = [];
                $.each($("table tr"), function (i, item) {
                    var RTONumber = $(item).find("[name=rtoNumber]").val();
                    var Approver = $(item).find("[name=approver]").val();
                    var Modifier = $(item).find("[name=modifier]").val();
                    var Comment = $(item).find("[name=comment]").val();

                    model.push({ rtoNumber: RTONumber, approver: Approver, modifier: Modifier, comment: Comment, checkBoxValue: subModel });
                });
                $.ajax({
                    url: ‘/TransportModelData/getModelInfo‘,
                    data: JSON.stringify(model),
                    type: ‘POST‘,
                    contentType: ‘application/json;charset=utf-8‘,
                    async: false,
                    success: function (data) {
                        //window.location.href = "/RequestStatus/RequestDetail?requestID=" + data.RequestID;
                        alert("Postting data is over!");
                    }
                });
                alert("loading data is over!")
            });
        });
</script>

Controller:

public class TransportModelDataController : Controller
    {
        //
        // GET: /TransportModelData/

        public ActionResult Index()
        {
            return View();
        }
        public ActionResult getModelInfo(List<Model> model)
        {
            string rtoNumber = model[0].rtoNumber;
            string modifier = model[0].modifier;
            string comment = model[0].comment;
            string approver = model[0].approver;

            return Content("");
        }

    }

执行结果截图:这里我们可以看到只执行了“$.ajax();”中的alert,并没有执行他后面的alert

  

  异步证明(async:true):

Model:

public class Model
    {
        public string rtoNumber { set; get; }
        public string approver { set; get; }
        public string modifier { set; get; }
        public string comment { set; get; }
    }

View:

<div id="container">
        <table id="table">
            <tr>
                <td><label>RTONumber</label><input name="rtoNumber" /></td>
                <td><label>Approver</label><input name="approver" /></td>
                <td><label>Modifier</label><input name="modifier" /></td>
                <td><label>Comment</label><textarea name="comment" cols="30" rows="4"></textarea></td>
            </tr>
        </table>
        <input id="submit" type="button" value="submit"/>
</div>

<script type="text/javascript">
        $(function () {
            $(‘#submit‘).click(function () {
                var model = [];
                var subModel = [];
                $.each($("table tr"), function (i, item) {
                    var RTONumber = $(item).find("[name=rtoNumber]").val();
                    var Approver = $(item).find("[name=approver]").val();
                    var Modifier = $(item).find("[name=modifier]").val();
                    var Comment = $(item).find("[name=comment]").val();

                    model.push({ rtoNumber: RTONumber, approver: Approver, modifier: Modifier, comment: Comment, checkBoxValue: subModel });
                });
                $.ajax({
                    url: ‘/TransportModelData/getModelInfo‘,
                    data: JSON.stringify(model),
                    type: ‘POST‘,
                    contentType: ‘application/json;charset=utf-8‘,
                    async: true,
                    success: function (data) {
                        //window.location.href = "/RequestStatus/RequestDetail?requestID=" + data.RequestID;
                        alert("Postting data is over!");
                    }
                });
                alert("loading data is over!")
            });
        });
</script>

Controller:

public class TransportModelDataController : Controller
    {
        //
        // GET: /TransportModelData/

        public ActionResult Index()
        {
            return View();
        }
        public ActionResult getModelInfo(List<Model> model)
        {
            string rtoNumber = model[0].rtoNumber;
            string modifier = model[0].modifier;
            string comment = model[0].comment;
            string approver = model[0].approver;

            return Content("");
        }

    }

执行结果截图:这里我们可以看到两个alert都执行了,不过由于“$.ajax();”中的alert受数据加载延迟了一会时间,所以他执行的比“$.ajax();”后面的alert稍微晚一点,这就证明了异步

注意:同步和异步中的代码是相同的,唯一不同点就是View中“async”的值不同,分别为“false”、“true”!

说明不好的话望谅解,希望大家可以理解~~

时间: 2024-08-04 10:12:38

ajax同步、异步执行简单理解与证明的相关文章

ajax同步异步设置导致的问题及return返回值(返回ajax请求的数据)

一.ajax同步异步设置导致父子页面数据更新不一致问题. 1.在修复入宿退宿功能时,发现点击退宿.入宿按钮时.父页面数据更新了但是子页面数据要重新打开才能更新.如下图: 因为数据刷新函数如下:父页面刷新函数findRoomPeople()采用的是异步,所以,操作的数据还没更新,子页面刷新函数loadRoomInfo()就已经执行,所以获取到的数据还是之前的数据. <script> roomHandle: function () { /*刷新数据变化*/ parent.cootoo_room.f

async: false 实现AJAX同步请求 ( $.ajax同步/异步(async:false/true) )

虽然说ajax用来执行异步请求的比较多,但有时还是存在需要同步执行的情况的. 比如:我需要通过ajax取执行请求以返回一个值,这个值在ajax后面是需要使用到的,这时就不能用异步请求了.这时候就需要使用到async这个属性了. async:true,(默认),异步方式,$.Ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.Ajax里的success方法,这时候执行的是两个线程. async:false,同步方式,所有的请求均为同步请求,在没有返回值之前,同步请求将锁住

福运来源码搭建与ajax同步异步

Ajax的请求方式根据异步参数的不同,可分为同步异步,默认为异步请求真 async:true //异步 async:fasle //同步 同步请求即当Ajax发出请求后,会把页面的所有代码停止加载,即页面进入假死状态,必须等Ajax请求 福运来源码搭建QQ:2152876294 网址diguaym.com完成返回数据后,才会解除假死状态,继续执行其他代码.异步请求则这个Ajax代码运行的时候其他代码一样可以运行. $.ajax({ type:"POST", url:"${st

ajax同步异步

test.html <a href="javascript:void(0)" onmouseover="testAsync()"> asy.js function testAsync(){    var temp;    $.ajax({        async: false,        type : "GET",        url : 'tet.php',        complete: function(msg){  

ajax同步异步问题

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

Ajax同步异步请求

一.什么是同步请求:(false)       同步请求即是当前发出请求后,浏览器什么都不能做,必须得等到请求完成返回数据之后,才会执行后续的代码,相当于是排队,前一个人办理完自己的事务,下一个人才能接着办.也就是说,当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面处于一个假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面解除假死状态. 二.什么是异步请求:(true)       异步请求就当发出请求的同时,浏览器可以继续做任何事,Ajax发送请求并不会影响页面的加

js同步异步执行顺序setTimeOut面试题分析

<script> for(var i=0;i<2;i++){ setTimeout(function(){ console.log(i); },0); } </script> // 结果:2,2 打印两个2而不是0,1,跟js执行顺序有关系. 所有的任务分为两种,一种是同步任务,一种是异步任务.同步任务是指在主线程上排队的任务.异步任务是指不进入主线程.而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异

关于ajax同步异步处理循环遍历及push时发生的疑问

今天写了一个简单的ajax请求,其中因为一些需求 渲染过程没有写在回调函数内,要在外部访问遍历后的数组进行渲染,第一次写时图片如下图 此时console.log(arr)打印出来的内容是一个长度为0,包含十条完整数据的数组,如下图 此时,当我访问arr[0]或者arr[1]时,均会出现undefined提示, 开始的时候我一直认为是数组操作的问题,在这个方向上努力了半天,发现方向可能是错的,最后觉得可能是因为ajax默认的异步请求,所以将请求改成了同步,如下图 此时打印的内容变成了想要的需求,如

Ajax同步异步;get和post

Ajax步骤: 1.新建XMLhttpRequest var xhr=new XMLhttpRequest 2.打开请求:xhr.open(参数1,参数2,参数3): 参数1:get还是post 参数2:请求路径 参数3:是否异步——true异步/false同步 3.发送请求:xhr.send(要发送的信息) 4.判断响应是否成功 status==200 同步和异步的区别: 异步时需要监听readyState的值是否为4(readstate:判断后台是否完全将数据成功) xhr.onreadys