jQuery AJAX缓存禁用不起作用?

6
我正在开发一个使用 ajax 请求获取信息的 Firefox 扩展程序。这是代码:
$.ajax({
        url: "http://127.0.0.1/foo/bar/Service?wsdl" + new Date().getTime(),
        beforeSend: function(request) { request.setRequestHeader("SOAPAction", "Group"); },         
        async: false,
        cache: false,
        type: "POST",   
        dataType: "xml",
        data: req,
        contentType: "text/xml; charset=\"utf-8\"",
        success: function (data, textStatus, xmlHttpRequest) {
        out = $(xmlHttpRequest.responseXML);
        }
    }); 

当发送到服务器的数据被更改时,我仍然得到相同的结果。我尝试通过在URL中添加"new Date().getTime()"和"cache: false"来避免这种情况,但似乎无效。重新启动浏览器后,我获得了正确的结果。
有人知道问题出在哪里吗?是否存在某种会话处理方式,使得服务器仍然返回旧的响应?
编辑:我进行了大量测试和调试,我认为我找到了问题所在:每个ajax请求都保存了一个包含会话ID的cookie,因此每次我再次发出请求时,服务器都会发送带有cookie中的会话ID的会话数据。真是糟糕的行为,我不知道可以通过ajax请求创建cookie。
因此,我需要编写一个函数,每当参数更改时删除此cookie即可解决问题。再次感谢您的帮助。

你尝试过这些建议中的任何一个吗? - kobe
是的,我现在尝试了Dr. Molle和gov的两个建议,但行为仍然相同。 - Bob
1
你们在服务器端做了缓存吗? - kobe
我对服务器端执行的操作没有任何影响,但我已经通过 SOAP 客户端进行了检查并且响应是正确的。 - Bob
2个回答

8

你能试试这个吗?

$(document).ready(function() {
  $.ajaxSetup({ cache: false });
});

为了更安全,建议使用Math.random()一起使用。

Date().getTime()和Math.random()一起使用。

http://127.0.0.1/foo/bar/Service?wsdl" + new Date().getTime() + Math.random()

1
尝试在时间戳前加上一个“&”符号:
http://127.0.0.1/foo/bar/Service?wsdl&" + new Date().getTime()

我猜 wsdl 参数放在 URL 里是有意义的,没有 & 符号会破坏这个参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接