2013-11-21 34 views
0

我是使用servlet和ajax進行編程的新手。我使用客戶端代碼來跟蹤圖像上的鼠標操作。我需要在拖動過程中將座標發送到servlet進行處理。我爲此使用ajax。我的代碼工作正常,但在處理servlet中的請求時似乎存在滯後。具體拖動。對Servlet的快速ajax請求導致性能問題

客戶端代碼:

$(document).ready(function(){ 


    // detect mousedown 
    $("#imgslot").mousedown(function(event){ 

     var leftClick = false;  // if user clicked the left mouse button              
     var rightClick = false;  // if user clicked the right mouse button 
     var interaction={type:"",action:"",lClick:"",rClick:"",x:"null",y:""}; 

     //if the client left clicks 
     if(event.which===1){ 

      leftClick=true; 
     } 

       //if the client left clicks 
     if(event.which===3){ 

      rightClick=true; 
     } 

     interaction={type:"interaction",action:"mousedown",lClick:leftClick,rClick:rightClick,x:event.clientX,y:event.clientY}; 
     sendAjax(interaction); 

     // detect dragging 
     $(this).on('mousemove',function(event){ 

       interaction={type:"interaction",action:"drag",lClick:leftClick,rClick:rightClick,x:event.clientX,y:event.clientY}; 
       sendAjax(interaction); 

     // detect mouseup 
     }).mouseup(function(event){ 

      interaction={type:"interaction",action:"mouseup",lClick:leftClick,rclick:rightClick,x:event.clientX,y:event.clientY}; 
      sendAjax(interaction); 

      rightClick = false; 
      leftClick = false; 

      $(this).off('mousemove'); 
      $(this).off('mouseup'); 

      });  

     }); 
}); 

function sendAjax(message) 
{ 
      $.ajax({ 
      url: "myServlet", 
      type: "POST", 
      data: message, 

      success: function (data) { 

      } 
      }); 
} 

在Servlet的:簡單的打印請求來測試性能

if (request.getParameter("type") != null) { 
    System.out.println(request.getParameter("action")); 
     if (request.getParameter("type").equals("interaction")) { 
      sendMouseActions(request.getParameter("action"), request.getParameter("lClick"), request.getParameter("rClick"), request.getParameter("x"), request.getParameter("y")); 
     } 
} 

我最大的問題是,在一拖,因爲我有發送每個座標,當我查看我的輸出時,即使在停止拖動操作後,它仍繼續打印出我正在拖動的內容。這種滯後持續了一段時間。有什麼建議?

回答

1

當然這會有不好的表現。你應該在客戶端使用JavaScript處理鼠標移動的東西。對於拖放發送servlet只能開始和結束終止位置。 Ajax請求是異步的,所以如果每次onmousemove被觸發時你發送一個請求,你最終會得到無序的座標。這可能就是爲什麼它告訴你,你停下來之後你還在拖着;請求正在失序。

+0

謝謝你的迴應。根據需求,我需要使用客戶端腳本來跟蹤鼠標移動,然後將其全部發送到servlet。例如,我不能只發送拖動的開始和結束座標。我必須將所有內容都發送到。也許阿賈克斯不是我應該看的解決方案? – user3018497

+0

您可以將所有點以javascript的形式保存併發送到最後。你在製作繪圖應用程序嗎?即使不是,看最後發送圖像到服務器的一些HTML5繪圖應用程序可能會有所幫助。 – developerwjk