首页 新闻 赞助 找找看

很急!Ajax验证用户名是否存在问题?望高手解答!

0
悬赏园豆:40 [已解决问题] 解决于 2010-12-09 10:44

验证用户名是否存在的功能已经实现了,但是现在又遇到问题了,当我点击ibtnSubmitReg这个注册按钮的时候,我调用CheckResult()这个函数判断用户是否验证通过,通过了就执行后台的代码,向数据库中添加记录!
但是现在的问题是当用户通过的验证,点击ibtnSubmitReg按钮,不能执行后台的代码,也就是说CheckUserName()这个函数返回的始终都是false!是ajax那块的问题!我调试的很久没找出问题!请教高手帮忙看看!

<asp:ImageButton ID="ibtnSubmitReg" OnClientClick="if(!CheckResult()) return false;"
ImageUrl
="~/images/reg_submit.gif" runat="server"
onclick
="ibtnSubmitReg_Click" />

 

1 //验证用户名
2   var req;
3 function CheckUserName() {
4 var uName = document.getElementById('<%=txtUserName.ClientID%>').value;
5 var uNameMs = document.getElementById('<%=uNameMessage.ClientID%>');
6 if (uName != "") {
7 req = GetXmlHttpRequest();
8 req.open("get", "../ClientHandle/GetUserExists.ashx?userName=" + uName);
9 req.onreadystatechange = function() {
10 if (req.readyState == 4) {
11 if (req.status == 200) {
12 if (req.responseText == "1") {
13 uNameMs.innerHTML = "<img class='check_img' src='images/no.jpg' alt='' />&nbsp;用户名已存在";
14 //alert("false");
15   return false;
16 }
17 else {
18 uNameMs.innerHTML = "<img class='check_img' src='images/yes.jpg' alt='' />";
19 //alert("true");
20   return true;
21 }
22 }
23 }
24 }
25 req.send(null);
26 }
27 else {
28 uNameMs.innerHTML = "<img class='check_img' src='images/no.jpg' alt='' />&nbsp;用户名不能为空";
29 return false;
30 }
31 }
32
33 //Ajax验证
34 function GetXmlHttpRequest() {
35 var http_request;
36 if (window.XMLHttpRequest) {
37 //如果是Mozilla浏览器
38 http_request = new XMLHttpRequest();
39 if (http_request.overrideMimeType) {
40 http_request.overrideMimeType("text/xml");
41 }
42 }
43 else if (window.ActiveXObject) {
44 //如果是IE浏览器
45 try {
46 http_request = new ActiveXObject("Msxml2.XMLHTTP");
47 }
48 catch (e) {
49 try {
50 http_request = new ActiveXObject("Microsoft.XMLHTTP");
51 }
52 catch (e) { }
53 }
54 }
55 return http_request;
56 }
57 //获取验证是否通过
58 function CheckResult() {
59 if (CheckUserName()) {
60 return true;
61 }
62 else {
63 return false;
64 }
65 }

 

服务端代码:

public class GetUserExists : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType
= "text/plain";
SqlDataReader dr
= SqlHelper.ExecuteReader(CommandType.Text, "select uid from users where username = @username", new SqlParameter("@username", context.Request["userName"].ToString()));
if (dr.Read())
{
context.Response.Write(
"1");
}
else
{
context.Response.Write(
"0");
}
}

public bool IsReusable
{
get
{
return false;
}
}
}

 

南城的主页 南城 | 初学一级 | 园豆:30
提问于:2010-12-05 13:28
< >
分享
最佳答案
0

返回应该是undefined吧,alert(CheckUserName())就知道了。是你的 req.onreadystatechange = function() {}这里的调用有问题,是调用方式不是代码。想象一下你在里面return ture/false,都不可能被调用CheckUserName的地方获得。

另外装个 firebug,用firefox进行测试了,可以设定breakPoint的。

收获园豆:40
沉默的糕点 | 小虾三级 |园豆:1786 | 2010-12-05 13:55
用firebug测试了,CheckUserName()返回的是fasle! 那我应该怎么调用function() {}啊?
南城 | 园豆:30 (初学一级) | 2010-12-05 14:00
在全局创建一个 变量,如 var checkNameResult=1,在 onreadystatechage 里面 不要return false/true,改为 checkNameResult=false or checkNameResult=true。 然后检查的时候,如果是1,继续等待检查结果,如果是false/true,那么就是检查结果了。另外ajax很强调异步,而你的调用方式是同步。 另外建议使用jquery之类的framework,不要自己写了。
沉默的糕点 | 园豆:1786 (小虾三级) | 2010-12-05 14:06
其他回答(2)
0

jquery

$.getJSON("URL",{},function(json){

 

});

URL:可以是一个ashx文件的地址,或者一个ACTION

迅捷网络[来送福利] | 园豆:616 (小虾三级) | 2010-12-05 16:12
0

把imagebtn换成普通的客户端按钮。

Astar | 园豆:40805 (高人七级) | 2010-12-06 12:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册