【问题标题】:Ajax call with setInterval does not fetch new data from database使用 setInterval 的 Ajax 调用不会从数据库中获取新数据
【发布时间】:2020-08-22 22:01:53
【问题描述】:

我正在做一个项目,我需要根据给定时间间隔后的日期和时间显示用户详细信息。我正在使用下面的代码,但它不能按照我的要求工作。

$(document).ready(function () {
  $.ajax({
    type: "Post",
    url: "<?php echo site_url('registrationc/map')?>",
    // data: "unit_id="+unitid,
    data: { startDate: startdate, endDate: enddate, status: status },
    success: function (data) {
      marker(data);
    },
  });
  refresh();
});

function refresh() {
  setInterval(function () {
    $.ajax({
      type: "Post",
      url: "<?php echo site_url('registrationc/map')?>",
      // data: "unit_id="+unitid,
      data: { startDate: startdate, endDate: enddate, status: status },
      success: function (data) {
        alert("success 2");
        alert(data);
        marker(data);
      },
    });
  }, 30000);
}

function marker_map(data){
    var locations=JSON.parse(data);
    alert(data);
    var map = new google.maps.Map(document.getElementById('map'), {
      zoom: 6,
      center: new google.maps.LatLng(20.5937,78.9629),//{ lat: 20.5937, lng: 78.9629 }
      mapTypeId: google.maps.MapTypeId.ROADMAP//HYBRID //SATELLITE//TERRAIN
    });

    var marker, i;
    //var contentString ='<div id="iw-container"><div class="iw-title" align="center"></div>';
    for (i = 0; i < locations.length; i++) 
    { 
        var url="http://maps.google.com/mapfiles/ms/icons/";
        if(locations[i]['status']=="green")
        {
            url+="green"+"-dot.png";
        }
        else if(locations[i]['status']=="yellow")
        {
            url+="yellow"+"-dot.png";
        }
        else if(locations[i]['status']=="orange")
        {
            url+="orange"+"-dot.png";
        }
        else
        {
            url+="red"+"-dot.png";
        }
    marker = new google.maps.Marker({
    position: new google.maps.LatLng(locations[i]['lat'], locations[i]['longi']),
    icon:{url:url},
    map: map});

    var land=locations[i][1];
    var contentString = '<div id="content">'+
     '<div class="iw-title">Patients Details</div>'+
      '<h5 id="firstHeading" class="firstHeading">Patients Details</h5>'+
      '<div id="bodyContent">'+
      '<p>'+
      '<p>Attribution: Uluru'+
      '</p>'+
      '</div>'+
      '</div>';
      google.maps.event.addListener(marker, 'click', (function(marker, i) {
    var content = '<div id="iw-container">' +
                    '<div class="iw-title">'+locations[i]['firstname']+'</div>' +
                    '<div class="iw-content">' +
                      '<div class="iw-subTitle">STATUS:'+locations[i]['status']+'</div>' +
                      '<div class="iw-subTitle">PERSONAL DETAILS</div>'+
                      '<h6>Age:'+locations[i]['age']+'</h6>'+
                      '<h6>Gender:'+locations[i]['gender']+'</h6>'+
                    '</div>' +
                    '<div class="iw-bottom-gradient"></div>' +
                  '</div>';  
    var infowindow = new google.maps.InfoWindow({content:content});

        return function() {
          //infowindow.setContent(locations[i][0]);
          infowindow.open(map, marker);
          //marker.setIcon('http://maps.google.com/mapfiles/ms/icons/blue-dot.png');
        }
      })(marker, i));
    }
}

ajax 函数在给定时间间隔后被调用,但它不会从数据库中获取新数据。例如,如果在第一次调用期间数据库中有三个条目,那么在给定间隔后第二次调用也只获取三个条目,即使有五个entry.how 我如何更改代码以获得预期的结果。

【问题讨论】:

  • 代码看起来不错。 maker 中的代码怎么样??
  • 问题可能出在startDate: startdate, endDate: enddate, status: status 你是如何创建变量的?
  • 我已将变量设置为 var today = new Date(); var time = today.getHours() + ":" + today.getMinutes(); var time1="00:00";变量状态=“全部”; var 今天 = 新日期(); var dd = String(today.getDate()).padStart(2, '0'); var mm = String(today.getMonth() + 1).padStart(2, '0'); //一月是0! var yyyy = today.getFullYear(); var startdate = yyyy + '-' + mm + '-' + dd+''+time1; var enddate = yyyy + '-' + mm + '-' + dd+' '+time;
  • 标记中的代码是根据从数据库中获取的数据在谷歌地图上绘制标记。
  • 你能检查我的答案吗!如果您将所有这些详细信息添加到问题中会很好。

标签: javascript php mysql ajax codeigniter


【解决方案1】:

问题似乎与您传递给 ajax 调用的数据有关。比如开始日期和结束日期。

请尝试以下示例:

function getStats() {
  var today = new Date();
  var time = today.getHours() + ":" + today.getMinutes();
  var time1 = " 00:00";
  var status = "all";
  var today = new Date();
  var dd = String(today.getDate()).padStart(2, "0");
  var mm = String(today.getMonth() + 1).padStart(2, "0"); //January is 0!
  var yyyy = today.getFullYear();
  var startdate = yyyy + "-" + mm + "-" + dd + "" + time1;
  var enddate = yyyy + "-" + mm + "-" + dd + " " + time;
  return { startdate, enddate, status };
}
$(document).ready(function () {
  let { startdate, enddate, status } = getStats();
  $.ajax({
    type: "Post",
    url: "<?php echo site_url('registrationc/map')?>",
    data: { startDate: startdate, endDate: enddate, status: status },
    success: function (data) {
      marker(data);
    },
  });
  refresh();
  function refresh() {
    setInterval(function () {
      let { enddate } = getStats();
      $.ajax({
        type: "Post",
        url: "<?php echo site_url('registrationc/map')?>",
        data: { startDate: startdate, endDate: enddate, status: status },
        success: function (data) {
          marker(data);
        },
      });
    }, 30000);
  }
});

【讨论】:

  • 你有没有尝试将时间减少到 3000 毫秒.. 试试这个电话是否正常工作。
  • 是的通话正在工作,但它获得的数据与之前的通话相同。
  • 如果我从浏览器刷新,它会获取所有数据以及新条目。
  • 它的意思是,startDate: startdate, endDate: enddate 逻辑是错误的..你是如何创建的?
  • 感谢@xdeepakv
猜你喜欢
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 2019-11-26
  • 2023-03-27
  • 1970-01-01
  • 2021-02-11
相关资源
最近更新 更多