我有一个标题元素,用日期框日历中的选定日期填充。
问题是我还有一个AJAX调用来加载内容,这需要10-15秒才能加载。当我更新带有校准日期的标题标签以显示所选日期时,它显示正常 - 我必须停止当前的AJAX调用,如果它仍在运行并在选择新日期时重新调用它。
我一直在使用location.reload(),它只是重新加载浏览器。这会丢失所有代码分配的标题日期,并且还允许AJAX调用加载两次!
function reajax() {
$('#roster h1 > span').text(sessionStorage.currentDate);
location.reload();
$('#callback').append('<div id="progress">Loading....</div>');
doRoster("doRoster", localUser, localPwd, localCode, reloadToday);
};
AJAX请求:
function doRoster(action, xuser, xpwd, xcode, xdate) {
$.get('https://www.xdomain.net/servlet/ServletController?device=stdbrowser&action=Login',
function(data) {
var jaction = "https://www.xdomain.net/servlet/ServletController";
$.post(jaction, { device: "stdbrowser", action: "doLogin", j_username: xuser, j_password: xpwd, j_accessCode: xcode, j_host: jaction }, function(data) {
var jsindex = data.indexOf('initMenu(');
var jsessionid = data.substring(jsindex + 10, jsindex + 48);
var prefix = data.substring(jsindex + 43, jsindex + 48);
var doAction = "https://" + prefix + ".xdomain.net/servlet/ServletController;jsessionid=" + jsessionid + "?action=" + action + "&date=" + xdate;
sessionStorage.jsid = jsessionid;
sessionStorage.jsid_prefix = prefix;
callLogStatus(prefix, jsessionid);
$.get(doAction, function(data) {
var iDivFormat = formatRxxxx(data);
$('#callback').append('<div class="divCal"></div>');
$('#callback .divCal').html(iDivFormat);
$('#progress').remove();
$('#callback .divCal ul').hide();
getRosterSearch();
});
});
});
return
};
答案 0 :(得分:0)
你可以通过这样做来中止ajax调用:
var call = $.ajax({
// some settings
});
call.abort();
顺便说一句:如果服务器需要10-15秒来加载数据,那么你在服务器端遇到严重问题,并考虑修复服务或者根本不使用它。
答案 1 :(得分:0)
只需使用最新请求保留变量即可。然后,无论何时需要发出新请求,都会中止之前的请求。像这样:
var lastRequest;
function doRoster(action, xuser, xpwd, xcode, xdate) {
if(lastRequest) lastRequest.abort();
lastRequest = $.get(/* ... */, function(data) {
lastRequest = $.post(/* ... */, function(data) {
lastRequest = $.get(/* ... */, function(data) {
});
});
});
}