使用jQuery ajax,回调函数必须在有一个alert()的前面才能执行?

请问下

 $(document).ready(function() {
                $("#confirm").submit(function(){
                    var $form = $(this);
                    $.post($form.attr("action"),$form.serialize(),function(data){
                        alert("5555");
                        if (data.code == 0) {
                            alert("添加成功,红包一个工作日到账,请注意查收");
                            $('#myModal2').modal('toggle');
                                return false;
                        }else{
                            alert(data.message);
                            return false;
                        }
                    },"json");
                                       //  alert();   //如果有这句alert就先走到这句然后才进入回调函数,如果没有直接走到下一句return false;为什么
                    return false; //直接走到这里
                });
            });

因为是异步执行的,所以如果不加上alert,可能外侧函数已经执行到false了,但是内侧的ready还没有执行到。

你可以加上async:false
http://www.cnblogs.com/xmphoenix/archive/2011/11/21/2257651.html

ajax在没有设置底层async参数是不阻塞方法往下执行的,也就是不同步的。因为ajax是网络请求,速度一般都没有继续往下执行的本地程序快。

所以所过不设置async参数的话,成功操作最好写在success中。

设置async如果网络特别慢的话,会造成页面假死的情况,所以不建议轻易设置该参数。