Переменная сеанса в элементе заголовка

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

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
    Где находится вызов ajax?
  • 0
    вызов ajax изначально загружается при загрузке страницы, а затем вызывается с помощью функции doRoster() выше. если первая загрузка завершается, проблем нет. Я думаю, что я ищу, как остановить функцию до ее завершения вместо перезагрузки браузера ...
Показать ещё 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) {

            });
        });
    });

}
  • 0
    Я не уверен, что следую? прерывание должно происходить извне функции doRoster. Этот вызов функции рассматривается как одно событие. Единственный вызов ajax, который занимает много времени, - это третий и последний запрос.
  • 0
    Я не понимаю, почему это было бы правдой, но если вы хотите, сделайте прерывание вне функции.
0

Вы можете прервать вызов ajax, выполнив следующее:

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

call.abort();

Кстати: если серверу требуется 10-15 секунд для загрузки данных, то у вас есть серьезная проблема на стороне сервера и рассмотрите либо исправление службы, либо ее вообще не использовать.

  • 0
    на самом деле это скриншот и данные / страница велика. будет call.abort () работать так же на функцию ()?
  • 0
    Похоже, мне нужно сохранить location.reload и найти способ назначить session.date обратно на h1, но я не уверен, что срабатывает первым на location.reload. Должен ли я переназначить дату на странице init?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню