如何在日期选择器应用按钮点击时用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> <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); });
代码说明:
- 封装函数:把日期显示更新和数据请求分别封装成
updateDateDisplay和fetchAnalyticsData,让代码更清晰且可复用。 - 事件监听:通过
apply.daterangepicker事件捕获用户点击应用按钮的动作,从picker对象中获取最新的startDate和endDate。 - 数据刷新:在事件回调中更新全局的start和end变量,然后调用
fetchAnalyticsData重新请求API并更新页面上的统计数据。
这样调整后,每次用户选择新的日期范围并点击应用,页面就会自动加载对应时间段的最新数据啦。
内容的提问来源于stack exchange,提问作者Darren
相关产品推荐
相关产品推荐

