最近接手了前同事的项目,关于使用线程控制实现代码热插拔功能!
在线程中,使用了ChatWebSocketHandler,与前台进行实时交互,今天我拿到需求是这样的,结合chatWebSocketHandler传递到页面的标识,将每一条执行之后的数据状态改写为执行成功! 前台使用$("#"+dataJson.Id).children(".state").text("成功"); 那么此处的Id是后台传来的,那么我想到的是通过Id再去后台修改状态! 我是这样实现的
websocket.onmessage = function(event) {
var data = event.data;
var dataJson = eval('(' + data + ')');
if(Id == 1){
$("#updateState").click(dataJson.Id,function(event){$.ajax({ update... })})
$("#updateState").click();
$('#updateState').unbind("click"); //移除click
}
}
那么此时问题来了,当执行第一条数据时,update发送了一次请求,而第二条发送,第一个和第二个Id,后面以此类推,于是我就开始尝试到底是什么问题,当然最终我还是没试出来,希望了解的朋友可以帮我解惑! 我的解决方式是当click执行之后,给他解绑,此时实现了我的需求! 由此我个人猜测,应该是click在每次加载页面的时候会执行,但是具体原因还是没找到! 如果以后找到原因,我会及时补充