验证用户名是否存在的功能已经实现了,但是现在又遇到问题了,当我点击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='' /> 用户名已存在";
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='' /> 用户名不能为空";
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;
}
}
}
返回应该是undefined吧,alert(CheckUserName())就知道了。是你的 req.onreadystatechange = function() {}这里的调用有问题,是调用方式不是代码。想象一下你在里面return ture/false,都不可能被调用CheckUserName的地方获得。
另外装个 firebug,用firefox进行测试了,可以设定breakPoint的。
jquery
$.getJSON("URL",{},function(json){
});
URL:可以是一个ashx文件的地址,或者一个ACTION
把imagebtn换成普通的客户端按钮。