0

日付ボックス カレンダーから選択した日付を入力するヘッダー要素があります。

問題は、コンテンツをロードするための AJAX 呼び出しもあり、ロードに 10 ~ 15 秒かかることです。ヘッダー タグを cal date で更新して選択した日付を表示すると、正常に表示されます。現在の AJAX 呼び出しがまだ実行されている場合は停止し、新しい日付を選択して再度呼び出す必要があります。

ブラウザをリロードするだけの location.reload() を使用しています。これにより、ヘッダーの日付が割り当てられたすべてのコードが失われ、AJAX 呼び出しが 2 回読み込まれます。

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

2 に答える 2

0

これを行うことで、ajax 呼び出しを中止できます。

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

call.abort();

ところで、サーバーがデータをロードするのに 10 ~ 15 秒かかる場合は、サーバー側に深刻な問題があり、サービスを修正するか、サービスをまったく使用しないことを検討してください。

于 2013-11-08T15:34:14.993 に答える