异步ajax调用和javascript代码

异步ajax调用和javascript代码,javascript,ajax,Javascript,Ajax,我有一个由ajax调用组成的特定脚本,函数使用ajax调用中的数据来计算一些东西。基本上有两个部分:一个较小的第一部分,包含大量代码和一些ajax调用;第二部分更大,代码更少,但是ajax调用很多。以下是我的脚本的“简化”版本: function doStuff(i, moreWork){ var max = 20000*Math.random() + (200000+100000*Math.random())*moreWork; for(var j = 0; j < ma

我有一个由ajax调用组成的特定脚本,函数使用ajax调用中的数据来计算一些东西。基本上有两个部分:一个较小的第一部分,包含大量代码和一些ajax调用;第二部分更大,代码更少,但是ajax调用很多。以下是我的脚本的“简化”版本:

function doStuff(i, moreWork){
    var max = 20000*Math.random() + (200000+100000*Math.random())*moreWork;
    for(var j = 0; j < max; j++){
        $("#hello").text();
    }
}

function ajaxCall(i, url){
    if(i === 40){
        return false;
    } 

    $.get(url, function(data){            
        url = $(data).find("#url").attr("href");
        if(i < 10){
            //The first few calls cause a lot of work
            doStuff(i, 1);        
        }
        else{
            //The others are much faster done
            doStuff(i, 0);
        }     
        ajaxCall(++i, url);
    });
}

var url = "www.example.com"
ajaxCall(0, url);
函数doStuff(i,moreWork){
var max=20000*Math.random()+(200000+100000*Math.random())*moreWork;
对于(var j=0;j
如果我在超时时更改ajax调用,我可以相对地看到这需要多长时间才能完成:

现在,我认为这个脚本的速度可能会快一倍,因为CPU在等待ajax调用时什么也不做。当CPU工作时,可以调用ajax调用

所以我已经做了一点小小的改进,我用doStuff替换了ajax调用:

function doStuff(i, moreWork){
    var max = 20000*Math.random() + (200000+100000*Math.random())*moreWork;
    for(var j = 0; j < max; j++){
        $("#hello").text();
    }
}

function ajaxCall(i, url){
    if(i === 40){
        return false;
    } 

    $.get(url, function(data){            
        url = $(data).find("#url").attr("href");
        ajaxCall(++i, url);
        if(i < 10){
            //The first few calls cause a lot of work
            doStuff(i, 1);        
        }
        else{
            //The others are much faster done
            doStuff(i, 0);
        }     
    });
}

var url = "www.example.com"
ajaxCall(0, url);
函数doStuff(i,moreWork){
var max=20000*Math.random()+(200000+100000*Math.random())*moreWork;
对于(var j=0;j

这样,脚本在第一个ajax调用完成后立即发送第二个ajax调用,然后从代码开始。第三个ajax调用在第一个代码之后发送,第二个ajax调用完成

有没有办法使这两个部分(ajax调用/处理代码)有点异步?我希望继续发送和接收ajax调用,而不必等待代码完成。在第二种情况下,计算机必须等待ajax调用返回,他利用这段时间编写一些代码,当调用到达时,他会中断代码一段时间以发送下一个代码。我的目标是,在每一个给定的时刻,都有一个ajax调用正在进行,我的CPU很忙,或者其中一个已经完成

更多说明:

在第一个示例中,工作方案如下:

  • 发送ajax调用1
    • 阿贾克斯:忙
    • CPU:什么也不做
  • 接收ajax调用1并启动doStuff 1
    • 阿贾克斯:什么也不做
    • CPU:忙
  • 完成doStuff 1并发送ajax调用2(&S)
    • 阿贾克斯:忙
    • CPU:什么也不做
  • 接收ajax调用2并启动doStuff 2
    • 阿贾克斯:什么也不做
    • CPU:忙
  • 在第二个示例中,工作方案如下:

  • 发送ajax调用1
    • 阿贾克斯:忙
    • CPU:什么也不做
  • 接收ajax调用1&&发送ajax调用2&&启动doStuff 1
    • 阿贾克斯:忙
    • CPU:忙
  • 完成ajax调用2
    • 阿贾克斯:什么也不做
    • CPU:忙
  • 完成doStuff&发送ajax调用3&启动doStuff 2
    • 阿贾克斯:忙
    • CPU:忙
  • 完成ajax调用3
    • 阿贾克斯:什么也不做
    • CPU:忙
  • 完成doStuff 2和发送ajax调用4和启动doStuff 3
    • 阿贾克斯:忙
    • CPU:忙
  • 我想要这个:

  • 发送ajax调用1
    • 阿贾克斯:忙
    • CPU:什么也不做
  • 接收ajax调用1&&发送ajax调用2&&启动doStuff 1
    • 阿贾克斯:忙
    • CPU:忙
  • 完成ajax调用2&发送ajax调用3
    • 阿贾克斯:忙
    • CPU:忙
  • 完成doStuff 1和开始doStuff 2
    • 阿贾克斯:忙
    • CPU:忙
  • 完成ajax调用3&发送ajax调用4
    • 阿贾克斯:忙
    • CPU:忙
  • 完成卷帘2和开始卷帘3
    • 阿贾克斯:忙
    • CPU:忙

  • XiozZe这不是在第一个ajax调用完成后调用下一个ajax调用!等待完成后,它调用下一个ajax调用。要在第一次打开完成后调用下一个ajax调用,您应该在ajax调用的回调函数中进行。根据定义,Ajax调用是异步的,因此您可以按顺序调用任意多个调用,而无需等待对方

    下面是一个jquery示例(只是为了让它更具可读性):

    上面这两个ajax调用将一个接一个地执行,它们不会互相等待。如果你想让第二个等待第一个,你可以这样做:

    $.get("your/url", function(){
          $.get("another/url");
    });
    

    我不能一次触发所有ajax调用,请参见我的编辑。已经谢谢你了!现在的情况是,第二个将在第一个完成后开火,第三个在第二个完成后开火,依此类推。如果要并行化调用,需要调用ajaxCall(++i,url);在ajax请求的回调函数之外。如果您不希望同时触发所有事件,则可以设置一些超时,以便在下一个事件触发之前等待一段时间。取决于你想要达到什么问题是,第三个不会在第二个之后立即开火。相反,它将排队,并在第一个代码完成后被激发。这将留下一个效率低下的缺口,可以用ajax call.jus来填补
    $.get("your/url", function(){
          $.get("another/url");
    });