ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JS 要注意 ajax的異步執行次序

2021-10-05 16:03:18  阅读:147  来源: 互联网

标签:overLapped 執行 alert ajax 衝突 async JS


前兩天碰到JS 調用 ajax, 這其中ajax的異步執行次序我們要注意,不小心可能會得到意外的結果。例:

//主函數:保存數據,其中調用子函數用于數據檢查
 function SaveData() {           
                if ($("#DataForm").valid()) {                  
                    var overLapped = CheckIfPracticeOverLapped(); //注意這個子函數有 ajax.
                    //當其async:true時,可能本行未執行結束,
                    //而直接執行下一行 if (overLapped),
                    //此時 overLapped = undifined ,為 false                  
                    if (overLapped) {
                        alert("有訓練時間衝突");
                    }
                    else {
                        $("#DataForm").submit();
                    }
                }
                else {
                    alert("頁面數據檢查不通過");
                }
            }
            //子函數,檢查要保存的數據是否有衝突
function CheckIfPracticeOverLapped() {           
            var overLapped = false; 
            $.ajax({
                type: "POST",
                url: '@Url.Action("CheckPraticeOverLapped", "SomeController")',
                data: {
                        "casePersonJson": $("#hidCaseSelected").val(),
                        "programJson": $("#hidProgramSelected").val()
                      },
                datatype: "html",
                async: true,//注意這個屬性
                    success: function (data) {
                        if (data.overLapped) { //有訓練時間衝突
                            overLapped = true;
                            $.each(data.overLappedRec, function (index, item) {
                                alert(“訓練時間衝突:” +item); // 執行次序 2
                            });
                        }
                        else { //沒有訓練時間衝突
                            //alert("沒有衝突");                                                       
                        }                        
                    },
                    error: function (xhr, status, error) {                          
                    }
            });
            alert("ajax:" + overLapped);// 執行次序為 1 , 并返回 overlapped = false
            return overLapped;   
}

注意:ajax async:true 與 async: false 區別
async:true 默認為true.
表示異步執行本次 ajax,程序可能會未等 待本ajax函數執行完成,而執行后繼的代碼. 在上面的子函數中,底部代碼的 alert 會比 ajax里的 alert先執行. return overlapped = false.

async: false
則會按先后次序,先執行 ajax內,再執行底面的 alert. 以及 return

标签:overLapped,執行,alert,ajax,衝突,async,JS
来源: https://blog.csdn.net/segclliwf/article/details/120614141

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有