搜索和尝试已经有几个小时了,但是作为ajax新手,我一直没有得到我想要的东西。1.我有一个页面从db中获取当前日期的数据,因此我使用一些setTimeOut()
的10 seconds
递归调用ajax函数,以显示更新后的db复读器。2.在这里,我失败了。我有日期选择器,所以一旦用户从jquery选择器中选择过去的日期,我就应该停止当前的ajax进程并获取特定日期的数据,并且我不希望它递归调用,因为过去的数据从未改变过。
递归事物的代码
function makeCall(selectedDate) {
$(document).ready(function() {
$("#divtable").hide();
$.get('getdataservlet',{ 'selectedDate': selectedDate },function(responseJson) {
if (responseJson!=null) {
$("#datatable").find("tr:gt(0)").remove();
var table1 = $("#datatable");
$.each(responseJson, function(key,value) {
var rowNew = $("<tr><td></td><td></td><td></td><td></td><td></td></tr>");
rowNew.children().eq(0).text(value['first']);
rowNew.children().eq(1).text(value['two']);
rowNew.children().eq(2).text(value['three']);
rowNew.children().eq(3).text(value['four']);
rowNew.children().eq(4).text(value['five']);
rowNew.appendTo(table1);
});
}
setTimeout(makeCall, 10000,selectedDate);
});
$("#divtable").show();
});
}
makeCall(currentDate());
这是第一次调用makeCall(currentDate())
,它每10秒继续使用setTimeout()
进行递归。
Jquery 的代码
$(function() {
$("#dateinput").datepicker({
onSelect: function(date) {
// Here I want to make single ajax call while
// stopping the current recursive call.
// The recursive should continue again when user selects current date.
},
showOn: "button",
buttonImage: "cal.gif",
buttonImageOnly: true,
dateFormat: "yy-mm-dd"
});
});
有人能帮我一下吗?很抱歉,尽管多次尝试,我还是无法正确地格式化问题中的代码。
发布于 2014-08-01 10:44:55
只需创建一个布尔标志,以指示所选的currentDate:
var someFlag = true,
timeout = null;
function makeCall(selectedDate) {
if (someFlag == true) {
$("#divtable").hide();
$.get('getdataservlet',{ 'selectedDate': selectedDate },function(responseJson) {
if ((!isCurrentDate(selected) || someFlag == true) && responseJson!=null) {
$("#datatable").find("tr:gt(0)").remove();
var table1 = $("#datatable");
$.each(responseJson, function(key,value) {
var rowNew = $("<tr><td></td><td></td><td></td><td></td><td></td></tr>");
rowNew.children().eq(0).text(value['first']);
rowNew.children().eq(1).text(value['two']);
rowNew.children().eq(2).text(value['three']);
rowNew.children().eq(3).text(value['four']);
rowNew.children().eq(4).text(value['five']);
rowNew.appendTo(table1);
});
}
timeout = setTimeout(makeCall, 10000, selectedDate);
});
$("#divtable").show();
}
}
$(document).ready(function() {
makeCall(currentDate());
});
此外,实现函数isCurrentDate,如果提供日期为currentDate,则返回布尔值。
$(function() {
$("#dateinput").datepicker({
onSelect: function(date) {
clearTimeout(timeout);
if (isCurrentDate(date)) {
someFlag = true;
makeCall(date);
} else {
someFlag = false;
}
},
showOn: "button",
buttonImage: "cal.gif",
buttonImageOnly: true,
dateFormat: "yy-mm-dd"
});
});
发布于 2014-08-01 10:53:45
如果所选日期小于今天的日期,则需要在计时器上调用clearTimeout
var timer;
function makeCall(selectedDate) {
$.get(...
....
if (selectedDate < new Date() && timer) {
// If a timer is already running and the selected date is less than today, stop it
clearTimeout(timer);
} else {
// Start a timer
timer = setTimeout(makeCall, 10000, selectedDate);
}
并在document.ready中调用此函数,并在选择新日期时调用该函数
演示使用情况的简单小提琴 (在文本框中输入一个数字以停止循环)
https://stackoverflow.com/questions/25078173
复制相似问题