日期:2014-05-17  浏览次数:20412 次

jquery的 $.ajax({ ....}) 会影响程序的执行顺序??

aspx中:
function f1() {
 $.ajax({
        url: "xxx.ashx?action=....",
        type: "post",
        error: function () { alert('数据加载失败!'); },
        success: function (rs) {
            if (rs == "y") {
                window.xxx= true;
            }
            else {
                window.xxx= false;
            }
        }
    });
        alert(window.isHasClass);
    }

ashx中:

 response.Write("....");
 response.End();


为什么执行的顺序是:
→  $.ajax({
→alert(window.isHasClass);
→response.Write("....");
→response.End();
→success: function (rs) {
→ if (rs == "y") {
。。。。

为什么 alert(window.isHasClass) 会比seccess:...  更优先执行?没按顺序来啊??

------解决方案--------------------
因为JQuery中的Ajax是异步执行的
------解决方案--------------------
ajax是异步提交处理,提交后需要响应返回结果..
你就当做再开一个线程执行代码
alert是正常的代码执行 
所以会比ajax快点
所以你代码处理要在ajax success中处理 放外面处理调不到success的结果的 
------解决方案--------------------
ajax是异步执行,就好比一个人排队买票,前面还有老长老长的队伍,然后他找了一个人帮他排队,他自己去嘘嘘,然后回来了队伍的时候该他买票了。就这样理解一下。
------解决方案--------------------
Ajax有两种执行方式
Jquery里面好像是没特别说明一般都是异步的。也就是说不按套路走。
手写Ajax的JS部分就很容易明白了
创建好xmlhttprequest对象之后,有个open的方法,3个参数
第一个参数是明确传递的方式,是POST还是GET
第二个参数就是你上面说的ASHX的URL
第三个参数是指明异步还是同步,true就是异步,false就是同步。

详细:http://blog.csdn.net/thinkpadleo/article/details/586267
------解决方案--------------------

 async: false, //是否异步   默认为 true 
 error: function() { alert('数据加载失败!'); window.location = "ErrorPage.htm"; },

------解决方案--------------------
$.ajax 默认是异步执行了  程序执行到ajax时不会被阻塞,而会直接执行下去

不过可以像LS所说的把ajax设为同步执行 async: false