You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在日期选择器应用按钮点击时用AJAX更新API请求与dateDates变量

解决Date Range Picker应用日期后重新加载API数据的问题

没问题,我帮你调整代码,实现点击应用按钮后自动刷新API数据的功能。核心思路是把数据请求逻辑封装成可复用的函数,然后监听daterangepicker的apply.daterangepicker事件来触发重新请求。

关键修改点:

  • 把API请求和数据处理逻辑封装成独立函数,方便重复调用
  • 监听日期选择器的应用事件,获取最新的日期范围
  • 更新日期参数并重新发起AJAX请求

完整代码:

HTML部分

<!-- Include Required Prerequisites -->
<script type="text/javascript" src="//cdn.jsdelivr.net/jquery/1/jquery.min.js"></script>
<script type="text/javascript" src="//cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/bootstrap/3/css/bootstrap.css" />
<!-- Include Date Range Picker -->
<script type="text/javascript" src="//cdn.jsdelivr.net/bootstrap.daterangepicker/2/daterangepicker.js"></script>
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/bootstrap.daterangepicker/2/daterangepicker.css" />

<div id="reportrange" style="background: #fff; cursor: pointer; padding: 5px 10px; border: 1px solid #ccc;">
  <i class="glyphicon glyphicon-calendar fa fa-calendar"></i>&nbsp;
  <span></span>
  <b class="caret"></b>
</div>
<div id="visitors"></div>

JavaScript部分

$(function() {
  var start = moment().subtract(29, 'days');
  var end = moment();

  // 封装日期范围显示更新函数
  function updateDateDisplay(start, end) {
    $('#reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
  }

  // 封装API数据请求与处理函数
  function fetchAnalyticsData(start, end) {
    const dateDates = start.format('YYYY-MM-DD') + ',' + end.format('YYYY-MM-DD');
    $.getJSON(`https://discovrbookings.innocraft.cloud/?module=API&method=API.get&format=json&idSite=2&period=day&date=${dateDates}&token_auth=68aa5bd12137f13255dcb98794b65dff`, (data) => {
      let visitors = 0;
      // 其他统计变量可以在这里继续处理
      for (const key in data) {
        if (data[key].nb_visits) {
          visitors += data[key].nb_visits;
        }
      }
      $("#visitors").html(visitors);
    });
  }

  // 初始化日期选择器
  $('#reportrange').daterangepicker({
    startDate: start,
    endDate: end,
    ranges: {
      'Today': [moment(), moment()],
      'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
      'Last 7 Days': [moment().subtract(6, 'days'), moment()],
      'Last 30 Days': [moment().subtract(29, 'days'), moment()],
      'This Month': [moment().startOf('month'), moment().endOf('month')],
      'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
    }
  }, updateDateDisplay);

  // 监听应用按钮点击事件,刷新数据
  $('#reportrange').on('apply.daterangepicker', function(ev, picker) {
    start = picker.startDate;
    end = picker.endDate;
    fetchAnalyticsData(start, end);
  });

  // 初始化加载数据
  updateDateDisplay(start, end);
  fetchAnalyticsData(start, end);
});

代码说明:

  1. 封装函数:把日期显示更新和数据请求分别封装成updateDateDisplay和fetchAnalyticsData,让代码更清晰且可复用。
  2. 事件监听:通过apply.daterangepicker事件捕获用户点击应用按钮的动作,从picker对象中获取最新的startDate和endDate。
  3. 数据刷新:在事件回调中更新全局的start和end变量,然后调用fetchAnalyticsData重新请求API并更新页面上的统计数据。

这样调整后,每次用户选择新的日期范围并点击应用,页面就会自动加载对应时间段的最新数据啦。

内容的提问来源于stack exchange,提问作者Darren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:26:09