全局设置ajax同步
更正一点:这个的同步,针对的是ajax请求的返回,而不是ajax-success返回后所有进行处理后才进行下一步。所以,window.location.href转跳这个在执行的时候,下面的代码依旧会执行的。
<script src="/Scripts/jquery-1.10.2.min.js"></script> <button onclick="c()" style="border:1px solid #000000;padding:10px;">按钮</button> <script> $.ajaxSetup({ async: false }); var i = 0; function c() { $.ajax({ url: "/test/requestcome", type: "post", success: function (data) { i++; window.location.href = "/test/edit/" + i;//转跳的action进行休眠延长时间控制,能够看到结果不是1 } }) } </script>
不断点击的效果:
$.ajaxSetup({ async : false });
1 $.ajax({ 2 url: "/importune/drawupdate", 3 data: { id: id, activitySceneID: '@Model.ActivitySceneID' }, 4 dataType: "json", 5 type: "post", 6 success: function (data) { 7 var showObj = $(".cmact_scrollbg .cmact_scroll"); 8 switch (data.status) { 9 case 0://未开始,理论上这个是没有的 10 clearInterval(interUpdate); 11 break; 12 case 1://进行中 13 break; 14 case 2://已结束 15 clearInterval(interCheckWin) 16 clearInterval(interUpdate); 17 jsprint("本轮活动已结束", "", "tip"); 18 break; 19 default: 20 clearInterval(interCheckWin) 21 clearInterval(interUpdate); 22 break; 23 } 24 }, 25 error: function () { 26 alert("服务器请求超时,请尝试重新加载页面"); 27 }, timeout: 15000,//超时 28 complete: function (XHR, TS) { XHR = null }//AJAX请求的清理 29 });
现在测试:
//全局设置ajax同步 $.ajaxSetup({ async: false }); var count = 1; var come = 1; function test() { console.log("1come="+come) console.log("1count="+count) come++; $.ajax({ url: "/screen/pair/test", type: "post", success: function (data) { count++; console.log("3count=" + count); } }) console.log("2come=" + come) console.log("2count=" + count) } var testin= setInterval(test, 100);
同步的时候:数据,会在ajax成功返回之后,才会进行计算的,即只有上一次AJAX完成后,才允许下一次AJAX请求进入
异步的时候:不管上一次ajax是否已经结束,js下一步的操作都会继续下去
现在来看,如果两个分开的function进行ajax,ajax同步的话,两个方法是否会有先后
//全局设置ajax同步 $.ajaxSetup({ async: false }); var count = 1; var come = 1; function test() { console.log("1come="+come) console.log("1count="+count) come++; $.ajax({ url: "/screen/pair/test", type: "post", success: function (data) { count++; } }) console.log("2come=" + come) console.log("2count=" + count) } var testin = setInterval(test, 100); var test2 = setInterval(test2, 100); function test2() { console.log("3come=" + come) console.log("3count=" + count) come++; $.ajax({ url: "/screen/pair/test", type: "post", success: function (data) { count++; } }) console.log("4come=" + come) console.log("4count=" + count) }
即使是两个不同的function,一旦设置同步,那么不管如何,都会在一个ajax请求结束后,才进行下一个。
所以如果存在两个以上的不断请求,不能使用ajax同步进行控制。当然在只有一个的时候,是没有问题的了,毕竟需要先后顺序设置