我是使用servlet和ajax进行编程的新手。我有用于跟踪图像上鼠标操作的客户端代码。我需要在拖动过程中将坐标发送到servlet进行处理。我为此使用ajax。我有代码工作,但在处理servlet中的请求似乎有一个滞后。特别是拖动。
客户端代码:
$(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"));
}
}
我最大的问题是,在拖动时,因为我必须发送每个坐标,当我查看输出时,它会继续打印出我即使停止拖动操作后拖动。这种滞后持续了一段时间。有什么建议吗?
答案 0 :(得分:1)
当然会有糟糕的表现。你应该在客户端的javascript中处理鼠标移动的东西。对于拖放,只发送servlet开始和最终结束位置。 Ajax请求是异步的,因此如果每次onmousemove被触发时你发送请求,你最终都会无法获得坐标。这可能就是为什么它告诉你,在你停下来之后你还在拖着;请求失灵。