午夜发贴:asp.net+ajax无刷新验证用户名源码出现的一点小问题
Reg.aspx.CS:
tbUserName.Attributes.Add("onblur", "CheckUser();");
----------------------------------------------------------------
Reg.aspx:
<script language="javascript">
function CheckUser()
{
var url = "Ajax.aspx?pm="+document.getElementById("tbUserName").value+"";
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
req.open("get",url, true);
req.onreadystatechange = HandleStateChange;
req.send(null);
}
function HandleStateChange()
{
if (req.readyState == 4)
{
if (req.status == 200)
{
document.getElementById("CheckInfo").innerHTML=req.responseText;
}
}
}
</script>
--------------------------------------------------------------
Ajax.aspx.CS:
protected void Page_Load(object sender, EventArgs e)
{
string pm = Request.QueryString["pm"];
string infos = "";
Response.ContentType = "text/plain";
try
{
if (pm == string.Empty)
{
infos = "用户名未填写";
Response.Write(infos);
}
else
{
string sql = "select id from Users where Username='" + pm + "'";
SqlDataReader dr = DBHelper.ExecuteReader(sql);
if (dr.Read())
{
infos = "用户名不可用";
Response.Write(infos);
}
else
{
infos = "用户名可以使用";
Response.Write(infos);
}
}
}
catch (Exception ec)
{
Response.Write(ec.Message);
}
}
-------------------------------------------------------------------
以后代码根本得不到正确的值:req.status == 400,即 Bad Request
是什么原因?!
问题点数:100、回复次数:44Top
1 楼zdyguilong(Keep Walking!)回复于 2006-12-27 09:12:13 得分 0
关注一下Top
2 楼tipboy(想做技术边缘人)回复于 2006-12-27 09:32:55 得分 0
var url = "Ajax.aspx?pm="+escape(document.getElementById("tbUserName").value)+"";Top
3 楼totoz(totoz)回复于 2006-12-27 09:33:26 得分 10
Response.ContentType = "text/plain";
你这里为什么用 text/plain,这是无格式正文Top
4 楼totoz(totoz)回复于 2006-12-27 09:39:16 得分 0
你的PM 值是不是中文的?
Top
5 楼wdx1632(lg)回复于 2006-12-27 10:21:02 得分 0
To:tipboy(想做技术边缘人)
var url = "Ajax.aspx?pm="+escape(document.getElementById("tbUserName").value)+"";
我的那个没有问题,我已经测试过.
To:totoz(totoz)
那用哪个呢????
To:totoz(totoz)
是中文的!!
希望能给个完整的解决方案.多谢!Top
6 楼wdx1632(lg)回复于 2006-12-27 10:27:14 得分 0
现在返回值已经变为字符了.只是仍然出现: HTTP 错误 400 - Bad RequestTop
7 楼totoz(totoz)回复于 2006-12-27 11:09:55 得分 10
你返回的东西只是用户名吧?
那去掉 Response.ContentType = "text/plain"; 这句试下Top
8 楼totoz(totoz)回复于 2006-12-27 11:11:56 得分 10
另外把你那个Ajax.aspx 前台
从 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML> 开始的代码全部是删除
只剩下第一行"<%@ Page language="c#" Codebehind="Ajax.aspx.cs"" ..... 这句就行
Top
9 楼wdx1632(lg)回复于 2006-12-27 11:37:56 得分 0
还是出现:
HTTP 错误 400 - Bad RequestTop
10 楼totoz(totoz)回复于 2006-12-27 11:51:00 得分 30
function createxmlhttprequest()
{
var xmlhttp=false;
try
{
xmlhttp=new ActiveXObject('Msxm12.XMLHTTP');
}
catch(e)
{
try
{
xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
}
catch(e)
{
try
{
xmlhttp=new XmlHttpRequest();
}
catch(e)
{
}
}
}
return xmlhttp;
}
function CheckUser()
{
var xmlhttp=createxmlhttprequest();
var username=document.getElementById('tbUserName');
xmlhttp.open('get','Ajax.aspx?pm='+username.value);
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4)
{
if(xmlhttp.status==200)
{
document.getElementById("CheckInfo").innerHTML=req.responseText;
}
}
}
xmlhttp.send(null);
}Top
11 楼totoz(totoz)回复于 2006-12-27 11:53:10 得分 10
写错了
这句 document.getElementById("CheckInfo").innerHTML=req.responseText;
换成 document.getElementById("CheckInfo").innerHTML=xmlhttp.responseText;
Top
12 楼wdx1632(lg)回复于 2006-12-27 12:03:58 得分 0
To:totoz(totoz)
感谢大哥给我指点.可是现在没有任何反应.当我把
if(xmlhttp.status==200)----> if(xmlhttp.status!=200)
出现:HTTP 错误 400 - Bad Request
现在是不是可以肯定是AJAX.aspx.cs的问题了?如果他有问题.那么应该怎么来实现呢?
Top
13 楼totoz(totoz)回复于 2006-12-27 12:57:10 得分 10
protected void Page_Load(object sender, EventArgs e)
改成 private void Page_Load(object sender, System.EventArgs e) 试下
另外你看下你的SQL语句有没有执行?Top
14 楼wdx1632(lg)回复于 2006-12-27 13:24:25 得分 0
还是 HTTP 错误 400 - Bad Request sql语句可以执行.Top
15 楼totoz(totoz)回复于 2006-12-27 13:29:29 得分 0
换成下面这个,看下是哪步出问题了,400错误一般是因为错误的语法导致无法理解请求信息
if(xmlhttp.readyState == 1){
document.getElementById("CheckInfo").innerHTML = "开始请求"
}
else if(xmlhttp.readyState == 2){
document.getElementById("CheckInfo").innerHTML = "正在请求"
}
else if(xmlhttp.readyState == 3){
document.getElementById("CheckInfo").innerHTML = "接受收据"
}
else if(xmlhttp.readyState==4)
{Top
16 楼wdx1632(lg)回复于 2006-12-27 13:48:25 得分 0
已经试了.xmlhttp.readyState==4 执行. 就是说已经完成了.但是 if(xmlhttp.status==200) 不会执行!Top
17 楼totoz(totoz)回复于 2006-12-27 13:52:16 得分 10
你那个Ajax.aspx 前台的代码都删光了不? 只剩最上面一行
.CS里面的Response.Write(infos); 有没有Write数据出来?Top
18 楼zdyguilong(Keep Walking!)回复于 2006-12-27 13:56:35 得分 0
继续关注Top
19 楼wdx1632(lg)回复于 2006-12-27 14:03:18 得分 0
Ajax.aspx 前台的代码已经删除干净了.Response.Write(infos); 我已经对此页进行了调用.可以根据程序正常显示出来.Top
20 楼totoz(totoz)回复于 2006-12-27 14:12:44 得分 10
... 所有正常,那就是返回数据的时候获取失败了?
你Web.config里面的requestEncoding是什么,改为gb2312看下Top
21 楼totoz(totoz)回复于 2006-12-27 14:14:21 得分 0
requestEncoding和responseEncoding 都改下Top
22 楼wdx1632(lg)回复于 2006-12-27 14:19:24 得分 0
已改..问题依旧:
HTTP 错误 400 - Bad RequestTop
23 楼totoz(totoz)回复于 2006-12-27 14:32:47 得分 0
我本地测试成功
string pm = Request["username"].ToString();
string infos = "";
try
{
if (pm == string.Empty)
{
infos = "用户名未填写";
}
else
{
string sql = "select id from Users where Username='" + pm + "'";
SqlDataReader dr = DBHelper.ExecuteReader(sql);
if (dr.Read())
{
infos = "用户名不可用";
}
else
{
infos = "用户名可以使用";
}
}
}
catch (Exception ec)
{
infos = ec.Message;
}
Response.Write(infos);Top
24 楼wdx1632(lg)回复于 2006-12-27 14:43:15 得分 0
楼上大哥,问题还是那样.
xmlHttp.statusText="Bad Request"Top
25 楼wdx1632(lg)回复于 2006-12-27 14:57:19 得分 0
var username=document.getElementById('tbUserName').value;
var url="Ajax.aspx?pm="+username+"";
//-------------------------
window.open(url);
//-------------------------
xmlHttp.open('get',url,true);
用 window.open() 弹出窗口可以看到,参数已经传递过来.页面上显示:用户名可以使用
可是现在问题仍然是:HTTP 错误 400 - Bad Request
Top
26 楼totoz(totoz)回复于 2006-12-27 15:07:27 得分 0
....我这里调试这个会正常显示的
你把xmlHttp.open('get',url,true);
换成xmlHttp.open('get',url,false);看下
Top
27 楼totoz(totoz)回复于 2006-12-27 15:08:39 得分 0
你是2.0 还是1.1的?Top
28 楼wdx1632(lg)回复于 2006-12-27 15:08:50 得分 0
2.0Top
29 楼totoz(totoz)回复于 2006-12-27 15:20:58 得分 0
我是 1.1的
2.0不太熟悉 不好意思Top
30 楼wdx1632(lg)回复于 2006-12-27 15:25:30 得分 0
无论如何.很感谢|***totoz(totoz)***|,如何今天解决不了.就结帖了.Top
31 楼wdx1632(lg)回复于 2006-12-27 15:41:49 得分 0
努力顶一下Top
32 楼myTJProgrammer()回复于 2006-12-27 15:53:04 得分 0
url="Ajax.aspx?pm='"+username+"'";这样可以吗Top
33 楼zdyguilong(Keep Walking!)回复于 2006-12-27 16:12:42 得分 0
lz一定要搞定阿,前一段时间我也想做这种效果,可没有成功……Top
34 楼wdx1632(lg)回复于 2006-12-27 16:13:19 得分 0
和这个没关系.因为我已经进行了判断.上面的函数:window.open(url)Top
35 楼wdx1632(lg)回复于 2006-12-27 17:00:38 得分 0
如果有大侠光临,请看题目.多谢关注.Top
36 楼test33(隐姓埋名)回复于 2006-12-27 20:16:04 得分 0
关注`Top
37 楼cat_hsfz(我的新Blog在http://cathsfz.cnblogs.com)回复于 2006-12-27 23:54:07 得分 0
你用Fiddler或者HttpWatch监听以下HTTP通讯,就知道到底是不是bad request,bad在哪里,哪方的代码该负责任咯。Top
38 楼wdx1632(lg)回复于 2006-12-28 10:40:17 得分 0
太高深了.不过.我会试一下的.Top
39 楼wdx1632(lg)回复于 2006-12-28 11:22:01 得分 0
Method Result Type URL
GET 400 text/html http://localhost:1377/
以上是HttpWatch监听的数据Top
40 楼wdx1632(lg)回复于 2006-12-28 11:26:32 得分 0
保存的XML文件内容是:
<?xml version="1.0" encoding="UTF-8" ?>
<log xmlns="http://simtec.ltd.uk/xml/log/3.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://simtec.ltd.uk/xml/log/3.2 http://www.simtec.ltd.uk/xml/log/3.2/log.xsd" />Top
41 楼zdyguilong(Keep Walking!)回复于 2006-12-28 11:29:51 得分 0
顶Top
42 楼wdx1632(lg)回复于 2006-12-28 17:11:43 得分 0
兄弟们,我暂不结帖了.正在用另一种方法做.如果成功.我贴出来.再结贴.Top
43 楼zdyguilong(Keep Walking!)回复于 2006-12-29 11:11:29 得分 0
顶Top
44 楼zdyguilong(Keep Walking!)回复于 2006-12-30 20:17:47 得分 0
楼主,我研究出来了Top




