0

一度に複数のajaxリクエストを送信します。ただし、ご存知のとおり、結果の到着時間は、リクエストを送信する時間とは関係ありません。さて、これは私に問題を引き起こします。

これが私が今直面していることです。

HTMLElementで作成されたTABボタンをクリックすると、ajax呼び出しが送信されます。

他のタブをクリックした直後にタブをクリックすると。2つのリクエストが一緒になり、どちらが最初に応答できるかわかりません。しかし、残念ながら、最後の1つは、最初のajaxリクエストよりも早く到着します。

次に、HTMLマークアップが乱雑になるので、私の質問は、ajax呼び出しを定期的に到着させる方法があるかどうかです。

initialize : function() { //<!-- this function call AJAX request
    this.getActivatedDeviceList();
    this.getDeActivatedDeviceList();
    this.getLostOrStolenDeviceList();
    this.getWaitingDeviceList();
},

getActivatedDeviceList : function() {
    var url = "/monitor/device/getActivatedDeviceJson/" + TopMenu.CURRENT_TAB + "/";
    this.loadTemplateAndFillUp(url, "#activatedDeviceTemplate", "#activatedDevice");
},

getDeActivatedDeviceList : function() {
    var url = "/monitor/device/getDeactivatedDeviceJson/" + TopMenu.CURRENT_TAB + "/";
    this.loadTemplateAndFillUp(url, "#deactivatedDeviceTemplate", "#deactivatedDevice");
},

getLostOrStolenDeviceList : function() {
    var url = "/monitor/device/getLostOrStolenDeviceJson/" + TopMenu.CURRENT_TAB + "/";
    this.loadTemplateAndFillUp(url, "#lostOrStolenDeviceTemplate", "#lostOrStolenDevice");
},

getWaitingDeviceList : function() {
    var url = "/monitor/device/getWaitingDeviceJson/" + TopMenu.CURRENT_TAB + "/";
    this.loadTemplateAndFillUp(url, "#waitingDeviceTemplate", "#waitingDevice");
},

loadTemplateAndFillUp : function(url, templateElement, appendElement) {
    $.ajax({ //<!--This ajax call fires upon initialize function
          url : url,
          dataType : 'json',
          beforeSend : function(xhr) {
              $(appendElement).children(".zoom").attr("src", "/monitor/img/icon/loading.gif");
          },
          complete : function(xhr) {
              setTimeout(
                  function() {
                      $(appendElement).children(".zoom").attr("src", "/monitor/img/btn/btn_zoom.png")
                  }, 
                  500
              );

              $(appendElement).find("table.dataBoxTable").tableScroll({height:DeviceManager.TABLE_HEIGHT});
              DeviceManager.columnAutoFit(appendElement);
              DeviceManager.addListenerAndHandler();
          },
          success : function(data) {
              $(templateElement).tmpl(data).appendTo(appendElement); //<!--This jquery template get messed up by ajax arrival order.
          },
          async: true
    });
},

私の英語を理解していただければ幸いです。どうもありがとうございます。

4

1 に答える 1

1

クライアント側:クライアント側 にカウンターがあります。つまり、ajaxCounter=0と言います。ajax呼び出しでは、カウンターをインクリメントしてから、パラメーターとしてカウンターを呼び出しに送信します。

2つの呼び出しが行われるため、ajaxCounterは2になります。

サーバー側: パラメーターとして受け取ったajaxCounterを常に返します。したがって、最初のajax呼び出しの場合、返されるのは1になります。したがって、2番目のajax呼び出しの場合、返されるのは2になります。

クライアント側: クライアント側で、ajaxCounter==counterReturnedFromClientかどうかを確認します。等しい場合は完全なメソッドを実行し、そうでない場合は無視します。

于 2012-05-17T13:25:34.007 に答える