异步ajax调用和javascript代码
我有一个由ajax调用组成的特定脚本,函数使用ajax调用中的数据来计算一些东西。基本上有两个部分:一个较小的第一部分,包含大量代码和一些ajax调用;第二部分更大,代码更少,但是ajax调用很多。以下是我的脚本的“简化”版本:异步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
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很忙,或者其中一个已经完成
更多说明:
在第一个示例中,工作方案如下:
- 阿贾克斯:忙
- CPU:什么也不做
- 阿贾克斯:什么也不做
- CPU:忙
- 阿贾克斯:忙
- CPU:什么也不做
- 阿贾克斯:什么也不做
- CPU:忙
- 阿贾克斯:忙
- CPU:什么也不做
- 阿贾克斯:忙
- CPU:忙
- 阿贾克斯:什么也不做
- CPU:忙
- 阿贾克斯:忙
- CPU:忙
- 阿贾克斯:什么也不做
- CPU:忙
- 阿贾克斯:忙
- CPU:忙
- 阿贾克斯:忙
- CPU:什么也不做
- 阿贾克斯:忙
- CPU:忙
- 阿贾克斯:忙
- CPU:忙
- 阿贾克斯:忙
- CPU:忙
- 阿贾克斯:忙
- CPU:忙
- 阿贾克斯:忙
- 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");
});