ajax 和post 可以设置它是否同步执行

ajax的async设置成false,为什么没效果

$.ajax( { async : false, type : "POST", dataType : "html", url : getURL() + "sysset/sysmonit/operation!check.action?id="+level.val(), success : function(json) { if(json==3){               alert(" 等于3就是不让过") return false; }}});alert("谁先");_
_________________________________________________________________返回的值是3,json=3,进入if,   alert(" 等于3就是不让过")这个也执行了,紧接的就是return false;按常理说,他不应该弹alert("谁先");,但是他弹出了“谁先”。。。求解!!!

你在回调函数里return是没有效果的




Jquery的同步和异步请求

    1 异步请求:
    1.1 $.ajax
       $.ajax({
                url : 'your url',
                data:{name:value},
                cache : false,
                async : true,
                type : "POST",
                dataType : 'json/xml/html',
                success : function (result){
                    do something....
                }
            });
    2 同步请求
    2.1 $.ajax
        $.ajax({
                 url : 'your url',
                 data:{name:value},
                 cache : false,
                 async : false,
                 type : "POST",
                 dataType : 'json/xml/html',
                 success : function (result){
                     do something....
                 }
             });
    2.2 $.post
       $.post(
                'your url',
                {name:value},
                function(data) {
                    do something...
                },
            'json/xml/html'
            );


最近在测试,发现有些效果不对,最后发现是post的执行顺序问题,所以研究了下,写了以下总结

1.post被请求多次,解决方法:

连接加入随机数 rand=""+Math.random()


复制代码
$.post("/Control/webControl.ashx?rand ="+Math.random(), { Method: "LoginIn", Parems: ps }, function (data, textStatus) {
                $("#divOver").css("visibility", "hidden");
                switch (data) {
                    case "1":
                        window.location = '/default.aspx';
                        break;
                    case "0":
                        $("#tips").text("找不到该用户");
                        u.focus();
                        changevcode();
                        errcount++;
                        break;
                    case "-1":
                        $("#tips").text("用户或密码错误");
                        changevcode();
                        c.val("").focus();
                        errcount++;
                        break;
                    default:
                        alert(data);
                }
            });

复制代码

2.因为post默认为异步请求,可是有时候我们会发现,本来要求请求马上出现,可是异步会导致后面突然再执行,这样就出问题了

所以,我们需要加入

$.ajaxSetup({  
            async : false 
        });

3.如果需要有些同步有些异步,那么我们应该使用最原始的ajax请求,然后把async设置为false


复制代码
$.ajax({ 
         type : "post", 
          url : "register/RegisterState", 
          data : "test=" + test, 
          async : false, 
          success : function(data){ 
            data = eval("(" + data + ")"); 
            aDataSet = data; 
          } 
     });

复制代码

猜你喜欢

转载自weitao1026.iteye.com/blog/2301920