Ajax XMLHttpRequest 请求问题
本帖最后由 Javkburd 于 2013-04-25 22:48:48 编辑 我用VS2012 做一个简单的注册验证,身份证前3位代表省份编号,各省份的相关信息存在数据库里。现在要对此进行验证(还没有进行身份证号其他方面的验证),用微软自带的自定义控件CustomValidator的ClientValidationFunction实现,即
<asp:CustomValidator ID="cvIdentity" runat="server" ControlToValidate="txtIdentity" ErrorMessage="身份证号错误" SetFocusOnError="True"
OnServerValidate="cvIdentity_ServerValidate" ClientValidationFunction="Identity_ClientValidate"></asp:CustomValidator>
function Identity_ClientValidate(source, args)
{
var str = args.Value;
if(str.length < 3)
{
if (str.length != 0)
{
args.IsValid = false;
}
return;
}
var xmlHttp = new XMLHttpRequest();
var url = "CheckProCode.aspx" + "?ID=" + str;
xmlHttp.onreadystatechange = function ()
{
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
{
if (xmlHttp.responseText == "身份证号错误")
{
args.IsValid = false;
}
}
}
xmlHttp.open("GET", url, true);
xmlHttp.timeout = 10000;
xmlHttp.send(null);
}
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
string ConStr = WebConfigurationManager.ConnectionStrings["SqlConString"].ToString();
string code = Request.QueryString["ID"].Substring(0, 3);
SqlConnection Con = new SqlConnection(ConStr);
Con.Open();
SqlCommand Cmd = new SqlCommand("SELECT * FROM PROVINCE WHERE DigitalCode =" + code, Con);
SqlDataReader dtrSql = Cmd.ExecuteReader();
if (!dtrSql.HasRows)
{
Response.Write("身份证号错误");
}
dtrSql.Close();
Con.Close();
}
}
var url = "CheckProCode.aspx" + "?ID=" + str+'&_dc='+new Date().getTime();
if (xmlHttp.readyState == 4)
{
if(xmlHttp.status == 200){
if (xmlHttp.responseText == "身份证号错误")
{
args.IsValid = false;
}
}else alert('动态页出错鸟~~\n'+xmlHttp.responseText)
}
调用下面的func方法永远得不到ajax的返回值,和你的这个要求类似
function func(){
var r='';
var xhr=new XMLHttpRequest();
xhr.open("get","xxxx.url",true);
xhr.onreadystatechange=function(){
if(xhr.readyState==4&&xhr.status==200)r=xhr.responseText;
}
xhr.send(null);
return r;
}