1

我今天遇到了一些令人惊讶的行为,并想确认这对于 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]

4

3 回答 3

4

你试过cache:false吗?

请参阅Ajax Jquery Api 文档

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

于 2013-06-14T09:19:56.793 回答
1

可能,这个结果被缓存了。尝试使用 ajax "cache: false;" 范围。

于 2013-06-14T09:20:20.767 回答
1

添加带有随机字符的查询字符串或使用 timestemp 参见示例

getrandom?t=xyzrandom
于 2013-06-14T09:24:27.587 回答