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

前端之家收集整理的这篇文章主要介绍了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@H_502_49@ Model
    {
        public string rtoNumber { set; get@H_502_49@; }
        public string approver { set; get@H_502_49@; }
        public string modifier { set; get@H_502_49@; }
        public string comment { set; get@H_502_49@; }
    }
View Code

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>
View Code
<script type="text/javascript">@H_502_49@
        $(function@H_502_49@ () {
            $('#submit').click(function@H_502_49@ () {
                var model =@H_502_49@ [];

                var RTONumber = $("input[name=rtoNumber]"@H_502_49@).val();
                var Approver = $("input[name=approver]"@H_502_49@).val();
                var Modifier = $("input[name=modifier]"@H_502_49@).val();
                var Comment = $("textarea[name=comment]"@H_502_49@).val();

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

Controller:

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

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

            return Content(""@H_502_49@);
        }

    }
View Code

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

  

  异步证明(async:true):

Model:

public class@H_502_49@ Model
    {
        public string rtoNumber { set; get@H_502_49@; }
        public string approver { set; get@H_502_49@; }
        public string modifier { set; get@H_502_49@; }
        public string comment { set; get@H_502_49@; }
    }
View Code

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>
View Code
<script type="text/javascript">@H_502_49@
        $(function@H_502_49@ () {
            $('#submit').click(function@H_502_49@ () {
                var model =@H_502_49@ [];

                var RTONumber = $("input[name=rtoNumber]"@H_502_49@).val();
                var Approver = $("input[name=approver]"@H_502_49@).val();
                var Modifier = $("input[name=modifier]"@H_502_49@).val();
                var Comment = $("textarea[name=comment]"@H_502_49@).val();

                model.push({ rtoNumber: RTONumber,async: true@H_502_49@,success: function@H_502_49@ (data) {
                    //window.location.href = "/RequestStatus/RequestDetail?requestID=" + data.RequestID;
                    alert("Postting data is over!"@H_502_49@);
                }
            });
            alert("loading data is over!"@H_502_49@)
        });
</script>
View Code

Controller:

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

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

            return Content(""@H_502_49@);
        }

    }
View Code

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

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

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

原文链接:https://www.f2er.com/ajax/164079.html

猜你在找的Ajax相关文章