我在网页中点击按钮,调用Jquery方法如下:
$.ajax(
            {
                type: "post",
                url: "test.ashx",
                contentType: 'application/x-www-form-urlencoded;utf-8',
                async: true,  //异步请求
             },
                success: function (result) {
                    checkAndShowAjaxResult(result);
                }
                ,
                error: function (msg)
                { alert('error'); }            });
我在被调用的页面test.ashx中的page_load里延时30秒,这样这个ajax请求直到30秒后才会收到返回数据,但是在这30秒之中,我点击了其他链接<a href>,或者页面上的其他按钮,全都会失去响应,一直要等到这个ajax请求返回之后才会响应,也就是被阻塞了。在IE和chrome中都是如此。这个是jquery的默认行为吗?有没有什么办法可以解决此问题?我希望的是实现当用户点击其他链接时,能够放弃掉当前请求直接跳转到其他页面。

解决方案 »

  1.   

    是不是你这个方法执行时间太长了checkAndShowAjaxResult。异步的不会阻塞的。
      

  2.   

    建议:一部请求已经发出去了,不好控制了。可以把你的这个一部请求封装起来,setTimeout(ajaxMethod(){},30000);这样 设置一个全局变量,isSubmit,如果在这个三十秒内 有其他点击发生,就设置isSumit=false。
    这个状态变量的作用 就是 方法ajaxmethod(){if(isSubmit){你的异步调用}}来控制。还有 你目前的调用 30秒延迟  没有道理阻塞啊
      

  3.   

    应该是后台被阻塞了,后台处理也是有队列的,先处理先来的请求再处理后面的,如果能改成多线程或者改变处理策略,可以更好些。
    试试链接的地址和按钮触发的请求是与ajax不同的url试试。
      

  4.   


    我被阻塞的时候还没有到success,不会执行该方法。
      

  5.   


    我ajax请求的是text.ashx,而我网页上点击其他链接比如A.aspx或者B.aspx,都会被阻塞,直到请求完成之后才会跳转,这个就让我无法理解了……
      

  6.   

    你有加  async: true,  //异步请求,不会是Ajax问题
    1,可能是你JS,checkAndShowAjaxResult 或其它地方 
    2,由访问text.ashx,引起后台被阻塞了
      

  7.   

    在你的代码后面加上alert(1);看看是否执行就知道是否被阻塞了。
      

  8.   

    你把服务端都阻塞了,当然不能响应请求,这和ajax有什么关系?
    你把链接的地址写成http://www.baidu.com之类的,不要用你自己的(因为你的服务端已经废掉),肯定就可以跳转了