<script type="text/javascript" language="javascript">
var xmlhttp;
var userresult="";
function createXmlHttpRequest()
{
try
{
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
catch(E)
{
xmlhttp=false;
}
}
if(!xmlhttp&&typeof XMLHttpRequest!='undefined')
{
try
{
xmlhttp=new XMLHttpRequest();
}
catch(_e)
{
xmlhttp=false;
}
}
}
function userCheck(xx)
{
createXmlHttpRequest()
var url=xx;
xmlhttp.open("GET", "Handler2.ashx?userCheck="+url,true);
xmlhttp.onreadystatechange=function(){usercallback()};
xmlhttp.send(null);
}
function usercallback()
{
if(xmlhttp.readyState==4)
if(xmlhttp.status==200)
{
userresult=xmlhttp.responseText;
if(userresult=="right")
{
//用户名不存在
document.getElementById("userNameErro").innerText="";
}
else if(userresult=="error")
{
//用户名已经存在
document.getElementById("userNameErro").innerText="";
var table1=document.createElement("<table border=0 width=150 bgcolor=white>");
table1.insertRow().insertCell().innerHTML="<font color=#ff0033>用户名已经存在,请重新输入!";
document.getElementById("userNameErro").appendChild(table1);
}
}
}
</script>
<input type="text" class="input.text" id="txtUserName" runat="server" maxlength="20" οnblur="userCheck(this.value)" style="width: 167px" />
<div id="userNameErro" ></div>
服务器端的代码如下:
string userCheck = context.Request.QueryString["userCheck"].Trim();
string strSql = "select user_name from user_info where user_name='" + userCheck + "'";
sqlDataBase db = new sqlDataBase();
SqlDataReader sdr = db.getDataReader(strSql);
if (!sdr.HasRows)
{
sdr.Close();
string right = "right";
context.Response.Write(right);
}
else
{
sdr.Close();
string error = "error";
context.Response.Write(error);
}
因为要检验用户名是否在数据库中存在 所以必须查询数据库,而有不能刷新页面,所以就想到了AJAX,但是用
JAVASCRIPT好恼火,总是不能进行调试,下了微软的MS DEBUG还是不行,还一运行就死。有时候能进行到JS里面去,(我都不知道怎么进去的),好象要把MS DEBUG SCRIPT开了,然后在设置断点,就可以在JS代码里面调试了,反正用着不爽的。
这也暴露了自己在JAVASCRIPT方面的弱点。
innerText和innerHTML的区别在于 后面可以包含前面,可以包含标签在内,例如下面的例子
table1.insertRow().insertCell().innerHTML="<font color=#ff0033>用户名已经存在,请重新输入!";
table1.insertRow().insertCell().innerText="<font color=#ff0033>用户名已经存在,请重新输入!";
前面输出的是红色的 “用户名已经存在,请重新输入!";” 后面输出的是“<font color=#ff0033>用户名已经存在,请重新输入!"”
自己在这个地方浪费了好多的时间
document.getElementById("userNameErro").innerText="";
var table1=document.createElement("<table border=0 width=150 bgcolor=white>");
table1.insertRow().insertCell().innerHTML="<font color=#ff0033>用户名已经存在,请重新输入!";
document.getElementById("userNameErro").appendChild(table1);
也尝试了好多办法,反正都是不行。
还有就是AJAX的JAVASCRIPT一定要HTML控件才可以识别,所以要是用了服务器端的控件 AJAX就实验不了
但是可以在html的控件中加一个 RUNAT变成伪服务器控件。这样2个都可以用了。
还有就是页面隐藏DIV的时候,可以让它里面什么都没有 例如这样 <div id="userNameErro" ></div>就可以拉。
用visible必须有runat才可以实现隐藏(在有文字的时候)。
今天还遇到一个问题,就是一个处理文件中实现了2个处理程序,在传回给浏览器的时候不能够正确的接收,我只好把2个HANDLER分开写了。
还有我今天在利用JAVASCRIPT调用C#方法的时候,它会在开始的时候调用,而不是在事件触发的时候调用,事件触发的时候会报错,说 找不到对象的属性或方法 , 我刚开始还以为它不支持 document.getElementById("userNameErro")这个。后来该来该去也没找到解决的办法。浪费好多时间。