我今天遇到了一些令人惊讶的行为,想确认这对于jquery是正常的,而不是愚蠢地做某事...

我有一个函数进行ajax调用,并在promise.done()上执行某些操作。以下是具有相同目的的简化示例。

function getRandom() {
    console.log('calling');
    var promise = $.ajax({
        url: '/getrandom/',
        type: 'GET'
    });
    promise.done(function (data) {
        console.log('got ' + JSON.stringify(data));
    });
}


出于此问题的目的,假定服务器将响应每个请求生成的随机数。

如果我足够快地调用此函数,以便在第一个响应之前打开多个调用,那么我将得到如下输出:

calling
calling
calling
got {num:3452345}
got {num:3452345}
got {num:3452345}
calling
calling
calling
got {num:2342342}
got {num:2342342}
got {num:2342342}


这让我感到非常惊讶,因为这表明某种程度上的承诺(或jquery内部的某种机制)已被覆盖。

这是正常的预期行为吗?

谢谢

[jQuery v 1.8.2]

最佳答案

您尝试过cache:false吗?

Ajax Jquery Api Documentation

执行GET查询时,您的浏览器将缓存Ajax。您应该检查服务器是否收到1个查询,而不是3个。

09-17 23:44