日期:2014-05-16  浏览次数:20540 次

ajax异常
$(".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的方法。