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

时间:2011-08-18 01:56:30

标签: ajax jquery asynchronous

昨晚我正在玩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代码如下,

<?php
sleep(1);
echo rand(); 
?>

我认为这显然是错误的,因为异步调用应该没有阻塞并几乎并行返回。经过多次游戏(假设它是一个服务器问题)后,我发现在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中按预期工作,但是在重新加载时只显示缓存的结果。

1 个答案:

答案 0 :(得分:0)

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

$.ajaxSetup({ cache : false });

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

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

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