AJAX 无法始终如一地工作

AJAX not working consistently

本文关键字:工作 始终如一 AJAX      更新时间:2023-09-26

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

基本上,所有这些所做的只是进行两个调用。当页面加载时,它会得到一个数字。然后,当用户提交表单时,它会进行第二次调用,这告诉我的 PHP 文件只需在当前提交总数中添加 1。

它大部分时间都有效,甚至在 IE7 和 IE8 中似乎对我有用(有点 - 它似乎以某种方式缓存了数字,所以你只能说它是从不同的浏览器更新的)。

编辑:我只使用IE7的开发人员工具测试了IE7和IE9,没有尝试过实际安装它们。

$(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>");
    }

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

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

发生这种情况是因为 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
    

要演示获取时间,请执行以下操作:

  • function postTime(){
       var d = new Date();
       console.log(d.getTime());
    }
    setInterval(postTime,1000);