jQuery Async当URL不同时,仅调用“parallel”

我昨晚玩jQuery和异步调用,发现了一个不寻常的问题。 我想在循环中运行多个Ajax调用。 我写了下面的内容(其中rand.php只是睡了一秒钟并返回一个随机数)。 有点令人惊讶的是它同步执行并需要20秒左右才能完成。

$(document).ready(function () { $([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]).each(function() { var number = this; $.get("rand.php", function(data) { $('#'+number).html(data); }); }); }); 

PHP代码如下,

  

我认为这显然是错误的,因为异步调用应该没有阻塞并几乎并行返回。 经过多次游戏(假设它是一个服务器问题)后,我发现向URL附加任何内容使其看起来像预期的那样不同。 也就是它在3秒左右的时间内返回(一次6个左右的呼叫)。

 $(document).ready(function () { $([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]).each(function() { var number = this; $.get("rand.php?"+number, function(data) { $('#'+number).html(data); }); }); }); 

我不认为jQuery / Javascript Guru能解释这种行为吗? 这是一些浏览器限制吗? 为什么只有当URL与我所期望的那样运行时不同?

编辑 – 而不是回复,这是使用Chrome(无论是最新的)和Firefox 5/6。 我确实在IE中尝试了它,它确实缓存了它,所以忽略了它并专注于Chrome。 有意思的是第一个在第一页加载时在IE9中按预期工作,但是在重新加载时只显示缓存的结果。

你是谁,不是你。 坏! 坏IE用户! IE缓存获取请求就好像它是任何其他内容一样。 Jquery有一个内置函数来解决这个问题:

 $.ajaxSetup({ cache : false }); 

这将添加一个漂亮的扰流板来处理这个问题。 但为什么要在其他浏览器中添加剧透? 通常我这样做:

 if(!+"\v1"){ $.ajaxSetup({ cache : false }); } 

哪个是IE测试,只在该浏览器中设置。