Javascript 头元素中的会话变量
我有一个header元素,它使用从datebox日历中选择的日期填充 问题是我还有一个AJAX调用来加载内容,这需要10-15秒来加载。当我用cal date更新标题标记以显示所选日期时,它看起来很好-如果当前AJAX调用仍在运行,我必须停止它,并用所选的新日期重新调用它 我一直在使用location.reload(),它只是重新加载浏览器。这将丢失所有代码分配的头日期,并且还允许AJAX调用加载两次Javascript 头元素中的会话变量,javascript,jquery,html,Javascript,Jquery,Html,我有一个header元素,它使用从datebox日历中选择的日期填充 问题是我还有一个AJAX调用来加载内容,这需要10-15秒来加载。当我用cal date更新标题标记以显示所选日期时,它看起来很好-如果当前AJAX调用仍在运行,我必须停止它,并用所选的新日期重新调用它 我一直在使用location.reload(),它只是重新加载浏览器。这将丢失所有代码分配的头日期,并且还允许AJAX调用加载两次 function reajax() { $('#roster h1 > span
function reajax() {
$('#roster h1 > span').text(sessionStorage.currentDate);
location.reload();
$('#callback').append('<div id="progress">Loading....</div>');
doRoster("doRoster", localUser, localPwd, localCode, reloadToday);
};
函数reajax(){
$('#花名册h1>span').text(sessionStorage.currentDate);
location.reload();
$('#callback').append('Loading…');
doRoster(“doRoster”,localUser,localPwd,localCode,今天重新加载);
};
阿贾克斯请求:
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
};
函数doRoster(action、xuser、xpwd、xcode、xdate){
$.get('https://www.xdomain.net/servlet/ServletController?device=stdbrowser&action=Login',
功能(数据){
变量jaction=”https://www.xdomain.net/servlet/ServletController";
$.post(jaction,{device:“stdbrowser”,action:“doLogin”,j_用户名:xuser,j_密码:xpwd,j_访问码:xcode,j_主机:jaction},函数(数据){
var jsindex=data.indexOf('initMenu(');
var jssessionid=data.substring(jsindex+10,jsindex+48);
var前缀=data.substring(jsindex+43,jsindex+48);
var doAction=“https://”+前缀+”.xdomain.net/servlet/ServletController;jsessionid=“+jsessionid+”?action=“+action+”&date=“+xdate;
sessionStorage.jsid=jssessionid;
sessionStorage.jsid_prefix=前缀;
callLogStatus(前缀,JSSessionID);
$.get(doAction,函数(数据){
变量iDivFormat=formatRxxxx(数据);
$('#callback')。追加('');
$('#callback.divCal').html(iDivFormat);
$(“#进度”).remove();
$('#callback.divCal ul').hide();
getRosterSearch();
});
});
});
返回
};
您可以通过执行以下操作中止ajax调用:
var call = $.ajax({
// some settings
});
call.abort();
顺便说一句:如果服务器需要10-15秒来加载数据,那么服务器端就有一个严重的问题,或者考虑是否使用它。 只要用最新的请求保存一个变量。然后,当你需要提出一个新的请求时,就放弃前面的内容。
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) {
});
});
});
}
ajax调用在哪里?ajax调用最初在页面加载时加载,然后使用
doRoster()调用
以上。如果第一次加载完成,就没有问题。我想我正在寻找如何在函数完成之前停止它,而不是重新加载浏览器…你能在ajax调用中包含代码吗?上面包含的代码…它实际上是屏幕抓取,数据/页面很大。调用.abort()对函数()是否也有同样的作用?看起来我需要保留位置。重新加载
并找到分配会话的方法。日期返回到h1,只是不确定位置上首先触发的是什么。重新加载,我应该在页面init中重新分配日期吗?我不确定是否遵循?中止需要从doRoster函数外部进行。此函数调用被视为一个事件唯一需要很长时间的ajax调用是第三个也是最后一个请求。我不明白为什么会是这样,但是如果您愿意,可以在函数之外执行中止。