可能说得有点抽象,先看如下代码:
for (var i=0;i <3;i++){   //这里调用ajax等跟后台交互的操作,交互完后会返回数据,我发现,这里并不能控制,本来应该调用3次后台操作,最终只有一次,这不是我想要的。问题显然出在,我调用后台操作时,循环差不多就结束了。
我想要的是:仅当前一次跟后台交互操作完成后,即返回数据后,后一次循环才接着执行,不知道有没办法做到?请大侠指教。
}
另:我用的是ext4前端技术,普通的js方面做不到,用ext能解决也行。

解决方案 »

  1.   

    for (var i=0;i <3;i++){
      // ajax request
    }这样写不是只调用一次ajax,而是几乎同时发出了3个ajax request,返回的结果视网络情况而定。你可以把代码改成这样
    function getData(url){
      $.ajax({
        url: url,
        type: get,
        success: function(){
          // to do ...
          getData(url);
        }
      });
    }
      

  2.   

    在success里面做一个递归
    或者是把ajax异步改成同步
      

  3.   

    很感谢各位参与,我试了下递归,也用了异步,但结合我的实例,问题还没真正完全解决。
    是这样子的,我是要实现,同时下载几个文作的操作,
    用了:在Ajax返回数据后,我用window.location = url;去实现下载文件的操作。
    url地址是后台返回的,本来同时要下载3个文件,最后,发现,永远只是下载最后一个,即i=2时,反台返回的url那个,不知,像我这种情况,要怎么实现同时下载3个文件呢?
      

  4.   

    getData(0);
    function getData(i){
      if(i>2)
       return;
      $.ajax({
        url: url,
        type: get,
        success: function(){
          // to do ...
       window.location = url;//每次返回时,我执行下载一个文件操作,但我发现,当i=0,1时,根本没执行下载操作,仅当i=2时,执行下载操作,很显然,最终只下载i=2时的那个文件
          
          getData(i+1);
        }
      });
    }
      

  5.   

    再次补充下,我把window.location = url;改为:window.open(url);
    发现,基本上解决了问题了,居然能下载两个文件了,但很奇怪的是,第2个文件没下载下来!
    即i=1时的那个文件,没下载,难道是太快了,i=1被i=2那个下载履盖掉了?
      

  6.   

    匿名函数 加闭包来实现吧
    for (var i=0;i <3;i++){
    (function (lockedInIndex) {
                return function (e) {
                    e.preventDefault();
                  //lockedInIndex索引
                  //调用ajax
                };
            })(i)
    }
      

  7.   


     $.ajax({
            url: "url",       
            async: false,   //注意这里
            success: function () {  //注意这里
                success = true
            }
        });
        if (success) { //注意这里
            window.open('http://google.com')
        }
      

  8.   

    把ajax异步改成同步,不过这样的话会锁死浏览器,文件将会是一个一个下载,
      

  9.   

    window.open的话直接下面就行了,什么操作不用,设置location的话跳转页面,只能下载一个for (var i=0;i <3;i++)
    $.ajax({url:'xxx',success:function(url){window.open(url)}});