$(".delete").click(function(){ var id = $(this).attr("name"); var canBeDeleted = false; $.get("<c:url value='/user/canBeDeleted.jhtml'></c:url>",{ID : id},function(data){ canBeDeleted = data.canBeDeleted; if(!data.canBeDeleted) { alert("无法删除用户,原因:" + data.errorInfo); } }); return canBeDeleted; });
这段代码很诡异,firebug单步调试能通过,但是直接运行就是不会触发删除动作。
经过反复实验发现,$.get是异步的,也就是说,js在执行完$.get的之后,不会等$.get执行完再执行后面的语句,而是直接执行它后面的语句,这样就造成几乎canBeDeleted一直是false,所以一直触发不了删除操作。
单步调试的时候,因为有一定的延迟时间的,而且在本地,$.get方法一般能做完,所以可以触发删除操作。
改法有很多种,一种是async(同步)置为true,一种是$(".delete")一直返回false,ajax回调中做$.get的方法。