进入index.jsp页面的方式有两种,一种是通过登录跳转到index.jsp,这时候会在session中写入一个attribute属性。第二种是直接进入index.jsp页面,这时候session中没有内容。 在index.jsp页面要根据session中的内容判断用户是否在登录状态,如果是的话,页面上有个地方会显示“xxx,欢迎来到本网站|退出登录”,如果不在登录状态则同一位置会显示“登录|注册”。 网页上显示内容通过jquery很容易实现,但是具体显示两者中的哪一个则要去获取session中的值(包括判断session中有没有值)来判断。 有没有比较简洁的方式实现这一功能呢?
$(".islogin").click(function(e){
$.ajax({
type:"GET",
url:"IsLoginAction",
success:function(data){
if($.trim(data)=="false"){
alert(123);
}
}
});
e.preventDefault();
});
});这段代码不是直接针对我的问题的,但是和我的问题思路是一致的。islogin是定义在a标签上的类,ajax返回true或者false值,如果返回true想让a标签正常跳转,否则就禁止a标签的默认行为。现在代码中的alert(123)能正常输出,e.preventDefault()这句也能正常起作用(就是禁止a标签跳转),但是把e.preventDefault()剪切到alert(123)的位置就不起作用了。
求解决方案。
这个问题有办法解决么,如果没有,通过什么方法能实现相同的效果!
哎,怎么没人回答呢,是问题问的太没水平了么?只能就这样结帖了!
自己纠结了好久终于找到了问题所在,不是e.preventDefault()写在$.ajax内部失效,而是因为$.ajax默认的是异步处理,e.preventDefault()写在$.ajax内部的时候,$.ajax内部代码的执行和外部代码的执行是不分先后顺序的,也就是谁处理的快,谁就先执行(也可以简单理解为同步执行),所以在e.preventDefault()执行之前,外部的a标签已经实现跳转了,效果和e.preventDefault()没有执行一样。
解决方案是把$.ajax的async参数设为false,使得所有代码按照先后顺序执行。但是这个是$.ajax不提倡的,这里实在是没有别的办法了。