0

我花了一段时间试图弄清楚这一点。我确信具有正确经验的人将能够看到这个问题,但我只是不明白为什么它不能始终如一地工作。

基本上,这一切都是打两个电话。页面加载时它会得到一个数字。然后,当用户提交表单时,它会进行第二次调用,这会告诉我的 PHP 文件将当前提交的总数加 1。

它在大多数情况下都有效,甚至在 IE7 和 IE8 中似乎也适用于我(有点——它似乎以某种方式缓存了数字,所以你只能知道它是从不同的浏览器更新的)。

编辑:我只使用 IE9 的开发工具测试了 IE7 和 IE8,还没有尝试过自己实际安装这些工具。

$(document).ready(function() {

  var request = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest;
      var url = "counter.php?myaction=getcount";
      request.open('GET', url, true);
      request.onreadystatechange = function() {
    if (request.readyState == 4) {
      request.onreadystatechange = doNothing;
      updateCounter(request.responseText);
    }
  };
  request.send(null);

});

    function doNothing() {};

    function addCount() {

  var request2 = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest;
      var url2 = "counter.php?myaction=addcount";
      request2.open('GET', url2, true);
      request2.onreadystatechange = function() {
    if (request2.readyState == 4) {
      request2.onreadystatechange = doNothing;
      updateCounter(request2.responseText);
              $('#stcPetitionForm').submit();
    }
  };
  request2.send(null);     

    }

    function updateCounter(numSubmissions) {
            $("#myCounter").html("<p>" + numSubmissions + "</p>");
    }
4

3 回答 3

1

这是一个相当有据可查的问题。如何防止浏览器中的 Ajax/javascript 结果缓存?提供了一些您可以尝试的好解决方案。

于 2012-04-12T16:35:16.417 回答
1

GET 请求被缓存。你在服务器端没有设置缓存头吗?

于 2012-04-12T16:20:45.827 回答
0

这是因为 GET 请求被缓存了。

如何避免缓存的示例:

  • var d    = new Date();
    var url2 = "counter.php?myaction=addcount&time=' + d.getTime();
    // you'd apply to all your url's not just url2
    

演示 getTime:

  • function postTime(){
       var d = new Date();
       console.log(d.getTime());
    }
    
    setInterval(postTime,1000);
    
于 2012-04-12T16:43:37.713 回答