首页 > 技术文章 > AJAX同步设置以及请求代码

danlis 2016-03-30 17:37 原文

全局设置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请求较完整的

现在测试:

//全局设置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)
        }
View Code

即使是两个不同的function,一旦设置同步,那么不管如何,都会在一个ajax请求结束后,才进行下一个。

所以如果存在两个以上的不断请求,不能使用ajax同步进行控制。当然在只有一个的时候,是没有问题的了,毕竟需要先后顺序设置

推荐阅读