解决方案 »

  1.   

    需求不明确,如果是第一个ajax请求之后再执行第二个ajax请求,然后返回结果给第一个ajax,那么可以是
    $.ajax(url1,{
       success:function(){
              $.ajax(url2,{
                   async:false,
                   success:function(){
                   }
              })
       }
    })
      

  2.   


    抱歉,知识浅薄,可能用错概念了。我是想实现: 可能有3、4个ajax请求,然而第2、3、4个请求,需求等一个数据出来后才能执行。
      

  3.   

    最外层的ajax并没有将async设置为false,怎么会阻塞浏览器呢?第一层的success事件中才进行了阻塞
      

  4.   


    那就在第1个ajax调用的success回调函数中去调用2、3、4就行了。你看只要结合具体实际机制,一下子就出来设计了。用不着被那些空洞模式名词而干扰沟通效率。
      

  5.   


    目前我就是这样实现的,哪如果有很多个这样的异步请求呢? 会把浏览器卡死你要确定调用时异步还是同步调用。另外javascript基本上是单线程的,就好像.net的“UI主线程”一样。所以执行耗时的函数操作就会“卡死”,跟ajax无关。要想让用户感觉流程一点,你就需要将耗时的函数操作中的内容拆成几十个、上百个小步骤,然后再 setTimeout 定时机制下去逐步实现。这样实际上是处理得更慢了,但是网页操作不卡了。
      

  6.   

    如果是因为你的代码执行的时间太长,这个跟ajax无关的。比如说,要对输入业务数据数组 arr[] 里边的内容进行处理,你可以写setTimeout(MyFunc(arr),1);MyFunc(arr)
    {
        if(arr.length()>0)
        {
            var x = arr.pop();
            处理任务(x);
            setTimeout(MyFunc(arr),1);
        }
    }
    这类代码。这里的arr也就是普通的参数,用不上高大上的“队列”概念,说成是“xxx数组”更能明白意思。
      

  7.   

    每次调用ajax的时候把调用函数push到一个Array中,然后在每次Ajax回调的时候Array.shift()执行   var _list = new Array();
                _list.push(function () { alert('3'); });
                _list.push(function () { alert('1'); });
                _list.push(function () { alert('2'); });
                _list.push(function () { alert('4'); });function _dequeue() {
                while (_list.length > 0) {
                    _list.shift()();
                }
            }