Javascript 头元素中的会话变量

Javascript 头元素中的会话变量,javascript,jquery,html,Javascript,Jquery,Html,我有一个header元素,它使用从datebox日历中选择的日期填充 问题是我还有一个AJAX调用来加载内容,这需要10-15秒来加载。当我用cal date更新标题标记以显示所选日期时,它看起来很好-如果当前AJAX调用仍在运行,我必须停止它,并用所选的新日期重新调用它 我一直在使用location.reload(),它只是重新加载浏览器。这将丢失所有代码分配的头日期,并且还允许AJAX调用加载两次 function reajax() { $('#roster h1 > span

我有一个header元素,它使用从datebox日历中选择的日期填充

问题是我还有一个AJAX调用来加载内容,这需要10-15秒来加载。当我用cal date更新标题标记以显示所选日期时,它看起来很好-如果当前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);
};
函数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调用是第三个也是最后一个请求。我不明白为什么会是这样,但是如果您愿意,可以在函数之外执行中止。