AJAX不能始终如一地工作

时间:2012-04-12 16:08:21

标签: javascript ajax

我花了一段时间试图弄明白这个。我确信拥有合适经验的人能够看到这个问题,但我无法理解为什么它不能持续发挥作用。

基本上,所有这一切都是两次通话。它在页面加载时得到一个数字。然后,当用户提交表单时,它会进行第二次调用,这会告诉我的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>");
    }

3 个答案:

答案 0 :(得分:1)

缓存GET请求。您是否在服务器端设置了没有缓存标头?

答案 1 :(得分:1)

这是一个记录完备的问题。 How to prevent Ajax/javascript result caching in browsers?提供了一些您可以尝试的好解决方案。

答案 2 :(得分: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);