0

我有一个标题元素,其中填充了日期框日历中的选定日期。

问题是我也有一个 AJAX 调用来加载内容,这需要 10-15 秒才能加载。当我使用 cal 日期更新标题标签以显示所选日期时,它看起来很好 - 如果当前 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);
};

阿贾克斯要求:

 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 
};
4

2 回答 2

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) {

            });
        });
    });

}
于 2013-11-08T17:48:05.883 回答
0

您可以通过执行以下操作中止 ajax 调用:

var call = $.ajax({
    // some settings
});

call.abort();

顺便说一句:如果服务器加载数据需要 10-15 秒,那么您在服务器端遇到了严重问题,请考虑修复服务或根本不使用它。

于 2013-11-08T15:34:14.993 回答