对ajax的执行顺序有疑惑

if(isPass == true){

    //发送注册异步请求
    $.ajax({
        type:"post",
        url :"/user/register",
        data:$("form").serialize(),
        dataType:"json",
        success:function(data){
            alert(data);
            if(data == "success"){
                alert("注册成功");
                window.location.href="/";//你跳转的页面
            }else if(data == "fail"){
                alert("注册失败:"+data);
            }

        },
        error:function(){
            //window.location.href="/111";
            alert("注册异常");
            return false;
        }
    });
    alert("注册异常1");
    return true;
}

执行代码后,为什么先是弹出注册异常1对话框,再弹出注册异常对话框呢

阅读 1.8k
3 个回答

因为ajax是异步

ajax的全称是Asynchronous Javascript And XML,也就是它发的请求是异步的。
什么是异步?比如你开着洗衣机洗衣服,然后去吃饭,洗衣机洗完衣服会响几声提醒你洗完了,这个时候你就去收衣服,这整个过程就是异步的。
如果你得等衣服洗好再去吃饭,那么这个过程就是同步的。
所以你的代码里面ajax()括号里面的回调函数会在success和error事件发生时才会提醒代码回来执行相应的方法,当success和error事件没有发生时,就依次执行ajax()后面的代码。
不知道我讲明白了吗?

$.ajax({
    ....
    error:function(){
        //window.location.href="/111";
        alert("注册异常");
        return false;
    }
});
alert("注册异常1");
//$.ajax()是异步操作,并没有中断后面alert("注册异常1"),此时接口还没有返回,所以回调函数error还没有执行。
....
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进