验证用户名是否存在的功能已经实现了,但是现在又遇到问题了,当我点击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" />
//验证用户名
var req;
function CheckUserName() {
var uName = document.getElementById('<%=txtUserName.ClientID%>').value;
var uNameMs = document.getElementById('<%=uNameMessage.ClientID%>');
if (uName != "") {
req = GetXmlHttpRequest();
req.open("get", "../ClientHandle/GetUserExists.ashx?userName=" + uName);
req.onreadystatechange = function() {
if (req.readyState == 4) {
if (req.status == 200) {
if (req.responseText == "1") {
uNameMs.innerHTML = "<img class='check_img' src='images/no.jpg' alt='' /> 用户名已存在";
//alert("false");
return false;
}
else {
uNameMs.innerHTML = "<img class='check_img' src='images/yes.jpg' alt='' />";
//alert("true");
return true;
}
}
}
}
req.send(null);
}
else {
uNameMs.innerHTML = "<img class='check_img' src='images/no.jpg' alt='' /> 用户名不能为空";
return false;
}
}//Ajax验证
function GetXmlHttpRequest() {
var http_request;
if (window.XMLHttpRequest) {
//如果是Mozilla浏览器
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType("text/xml");
}
}
else if (window.ActiveXObject) {
//如果是IE浏览器
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) { }
}
}
return http_request;
}
//获取验证是否通过
function CheckResult() {
if (CheckUserName()) {
return true;
}
else {
return false;
}
}服务器端代码: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;
}
}
}
但是现在的问题是当用户通过的验证,点击ibtnSubmitReg按钮,不能执行后台的代码,也就是说CheckUserName()这个函数返回的始终都是false!是ajax那块的问题!我调试的很久没找出问题!请教高手帮忙看看!<asp:ImageButton ID="ibtnSubmitReg" OnClientClick="if(!CheckResult()) return false;"
ImageUrl="~/images/reg_submit.gif" runat="server"
onclick="ibtnSubmitReg_Click" />
//验证用户名
var req;
function CheckUserName() {
var uName = document.getElementById('<%=txtUserName.ClientID%>').value;
var uNameMs = document.getElementById('<%=uNameMessage.ClientID%>');
if (uName != "") {
req = GetXmlHttpRequest();
req.open("get", "../ClientHandle/GetUserExists.ashx?userName=" + uName);
req.onreadystatechange = function() {
if (req.readyState == 4) {
if (req.status == 200) {
if (req.responseText == "1") {
uNameMs.innerHTML = "<img class='check_img' src='images/no.jpg' alt='' /> 用户名已存在";
//alert("false");
return false;
}
else {
uNameMs.innerHTML = "<img class='check_img' src='images/yes.jpg' alt='' />";
//alert("true");
return true;
}
}
}
}
req.send(null);
}
else {
uNameMs.innerHTML = "<img class='check_img' src='images/no.jpg' alt='' /> 用户名不能为空";
return false;
}
}//Ajax验证
function GetXmlHttpRequest() {
var http_request;
if (window.XMLHttpRequest) {
//如果是Mozilla浏览器
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType("text/xml");
}
}
else if (window.ActiveXObject) {
//如果是IE浏览器
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) { }
}
}
return http_request;
}
//获取验证是否通过
function CheckResult() {
if (CheckUserName()) {
return true;
}
else {
return false;
}
}服务器端代码: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;
}
}
}
解决方案 »
- 按钮点击后能根据Gridview某列填写的内容隐藏显示,且不影响时时填写的内容
- 关于办公设备的折旧率的问题.用触发器,还是定时执行存储过程
- 用什么控件从数据库分页显示图片商品信息~急
- datalist请大家给解释一下
- 请问怎样实现点击datagrid1的一项,加载datagrid2
- 无法写txt文件.
- OleDb操作excel的问题:怎么用oledb删除excel中的数据,急啊!
- .net身份验证模式
- 我在窗体中嵌入了一个iframe 框架,我想从框架中向主窗体传值,怎么实现?
- 100分求救!关于数据更新的问题!
- asp.net mvc3 addview 问题
- 怎么实现RadioButtonList组单位
我在CheckResult()里看的是false,但是我的验证已经通过了,
执行了else {
uNameMs.innerHTML = "<img class='check_img' src='images/yes.jpg' alt='' />";
//alert("true");
return true;这个代码后,应该为true啊?
{ public void ProcessRequest(HttpContext context)
{
string username = HttpUtility.UrlDecode(context.Request.QueryString["username"].ToString());
if (SysUserBLL.Exists("UserID", Util.FormatInputStr(username)))
{
context.Response.Write("该用户名已经有人使用!" + username);
}
else
{
context.Response.Write("OK");
} System.Threading.Thread.Sleep(1000);
} public bool IsReusable
{
get
{
return false;
}
}
}http://topic.csdn.net/u/20100420/11/5d938f4b-067e-446b-9cea-aaee8d70b5dd.html
OnClientClick="if(
!CheckResult()) return false;"var isCheck = "false";if (req.readyState == 4) {
if (req.status == 200) {
if (req.responseText == "1") {
uNameMs.innerHTML = "<img class='check_img' src='images/no.jpg' alt='' /> 用户名已存在";
//alert("false");
isCheck = "false";
return false;
}
else {
uNameMs.innerHTML = "<img class='check_img' src='images/yes.jpg' alt='' />";
//alert("true");
isCheck = "true"
return true;
}
}
}改为
if (req.readyState == 4) {
if (req.status == 200) {
if (req.responseText == "1") {
uNameMs.innerHTML = "<img class='check_img' src='images/no.jpg' alt='' /> 用户名已存在";
//alert("false");
return false;
}
else {
uNameMs.innerHTML = "<img class='check_img' src='images/yes.jpg' alt='' />";
//alert("true");
return true;
}
}
}在注册时判断isCheck的值就行了
我刚学XMLHttpRequest这个对象,不怎么会!
因为是在异步执行
当你执行CheckResult()的时候,程序已经向后运行了return false;而ajax请求还没有执行,这时候处于等待服务器返回的状态
解决方法:你可以这样, 把这个按钮生成onclick的javascript复制出来(通过查看原代码 )然后放到你的ajax代码这段下面
if (req.responseText == "1") {
//在这里放上那个按钮生成的onclick=""代码...这样,就会等到服务器返回后才执行按钮的onclick命令了,
req.open("get", "../ClientHandle/GetUserExists.ashx?userName=" + escape(uName),false);