//我做的一个用户登陆,用ajax实现验证用户的账号和密码的,现在验证的功能已经实现了,但是当用户输入正确的账号和密码的时候,我要点两次才能登陆成功,点第一次弹出“用户名或密码错误”,点第二次就能成功!
//请教高手这是什么原因,代码如下?
//怎么解决?1 var loginreslut;
2 //验证用户名或密码是否为空
3 function CheckIsNull() {
4 var uName = document.getElementById('<%=txtLoginUser.ClientID%>').value;
5 var uPwd = document.getElementById('<%=txtLoginPwd.ClientID%>').value;
6 if (uName != "" && uPwd != "") {
7 return true;
8 }
9 else {
10 return false;
11 }
12 }1 <asp:ScriptManagerProxy ID="smpLogin" runat="server">
2 <Services>
3 <asp:ServiceReference Path="~/ClientHandle/AjaxWeb.asmx" />
4 </Services>
5 </asp:ScriptManagerProxy>
6 <asp:LinkButton ID="lbtnLogin" runat="server" OnClientClick="if(!CheckReslut()) return false;" onclick="lbtnLogin_Click">登陆账户</asp:LinkButton>
13
14 //向服务器发送验证用户名和密码请求
15 function CheckLogin() {
16 var uName = document.getElementById('<%=txtLoginUser.ClientID%>').value;
17 var uPwd = document.getElementById('<%=txtLoginPwd.ClientID%>').value;
18 //GetLoginResult是WebService中的方法,验证用户和密码是否正确,返回bool类型
19 WebGame.ClientHandle.AjaxWeb.GetLoginResult(uName, uPwd, CheckLoginResult);
20 }
21
22 //接受服务器返回的验证结果
23 function CheckLoginResult(r) {
24 if (r) {
25 loginreslut = true;
26 }
27 else {
28 loginreslut = false;
29 }
30 }
31
32 //验证所有验证是否通过
33 function CheckReslut() {
34 if (CheckIsNull()) {
35 //调用向服务器发送请求的函数
36 CheckLogin();
37 if (loginreslut == true) {
38 return true;
39 }
40 else {
41 alert("用户名或密码错误");
42 return false;
43 }
44 }
45 else {
46 alert("用户名或密码不能为空");
47 return false;
48 }
49 }
50
AJAX是分为同步和异步的(你用的很显然是异步的) CheckReslut()这个方法有点拖了裤子放屁的感觉(原谅我的粗俗)
当你在这个方法里面执行 CheckLogin()之后程序是不会等待的
这个时候做这个判断显然不合理 if (loginreslut == true)
CheckLoginResult() 在这个方法里面就可以判断用户是否登录成功了不是吗?
如果你坚持要这样写 那就把Ajax写成同步的
貌似还没说出来什么问题。。。
建议用fiddler看下服务器返回的响应内容
登陆成功,返回刷新这个页面。