看谁能解决?????????

Eagle_ice 2008-10-29 11:09:34
问题是这样的,我尽量描述清楚,请大家看的仔细些,小弟先谢过了...
Register.aspx页面

<head runat="server">
<title>无标题页</title>
<script type="text/javascript">
var xmlHttp=false;
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e2)
{
xml=false;
}
}
if(!xmlHttp)
{
xml=new XMLHttpRequest();
}
function checkUser(userName)
{
var url="DisposeEvent.aspx?Name="+userName;
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=backInfo;
xmlHttp.send(null);
}
function backInfo()
{
if(xmlHttp.readyState==4)
{
if(xmlHttp.status==200)
{
alert("false");
if(xmlHttp.responseText=="true")
{
document.getElementById('message').innerHTML="对不起,此用户已存在!";
}
else
{
document.getElementById('message').innerHTML="恭喜您,此用户可注册!";
}
}
}
}
</script>
</head>
<table style="width: 500px; height: 164px">
<tr>
<td style="width: 80px">
用户名:</td>
<td style="width: 100px">
<input id="userName" type="text" onchange="checkUser(document.getElementById('userName').value)"/></td>
<td style="width: 100px">
<div id="message"></div>
</td>
</tr>
<tr>
<td style="width: 80px">
密码:</td>
<td style="width: 100px">
<input id="userPwd" type="text" /></td>
<td style="width: 100px">
</td>
</tr>
<tr>
<td colspan="3">
<input id="RegBtn" type="button" value="注册" /></td>
</tr>
</table>

处理页面:(已引入using System.Data.SqlClient)
DisposeEvent.asp.cs

public partial class DisposeEvent : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
User user = new User();
if (user.LoadUserData(Request.QueryString["Name"].ToString()))
{
Response.Write("true");
Response.End();
}
else
{
Response.Write("false");
Response.End();
}
}
}

User类中的检查用户是否存在的方法

public bool LoadUserData(string userName)
{
int Result = 0;
bool exist = false;
SqlConnection con = DB.createDB();
SqlParameter pUserName = new SqlParameter("@UserName", SqlDbType.VarChar, 100);
pUserName.Value = userName;
string SqlText = string.Format("select count(*) from Users where UserName={0}", pUserName);
SqlCommand sqlcmd = new SqlCommand(SqlText,con);
sqlcmd.Parameters.Add(pUserName);
try
{
con.Open();
Result = Convert.ToInt32(sqlcmd.ExecuteScalar());
if (Result > 0)
{
exist = true;
}
}
catch(SqlException ex)
{
throw new Exception(ex.Message,ex);
}
finally
{
con.Close();
}
return exist;
}

数据库类DB.cs

public class DB
{
public DB()
{
}
public static SqlConnection createDB()
{
string sqlcon = "server=(local);database=practice;uid=sa;pwd=;";
SqlConnection con = new SqlConnection(sqlcon);
return con;
}
}

我想实现的就是用ajax方法检查用户是否已注册,可是当我输入数据库中已存在的用户名时,还是提示“恭喜您,此用户可注册!”就是说在处理页面DisposeEvent.asp.cs中的返回值始终是false,进而造成了在调用回调函数时responseText始终是false,我设置断点跟踪,看到LoadUserData()方法中的Result始终是0,所以exist也就始终为false,即根本没执行数据库操作,但是我原先不用ajax就能用啊,怎么一到ajax就不行了呢?导致数据库操作没执行,可能是Request.QueryString["Name"].ToString()没接到值,但它是处理页面,且我只用.cs页面,不用设计页面,怎么判断啊?
...全文
101 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eagle_ice 2008-10-30
  • 打赏
  • 举报
回复
真是怪了 昨天调试那么久还是不行 今天又看了大家细心的解答...真是高兴
最后自己瞎弄了一下 居然可以了..虽然分不多 还真是感谢大家...
Eagle_ice 2008-10-30
  • 打赏
  • 举报
回复
问题已解决...
具体方法是 对传过来的用户名
var url="DisposeEvent.aspx?Name="+escape(userName); <!--encodeURI也可以--!>

处理页面判断一下请求值

if(Request.QueryString["Name"]!=null)
{}

查询用户时去掉半角空格

user.LoadUserData(Request.QueryString["Name"].Trim().ToString())
Eagle_ice 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhoufoxcn 的回复:]
注意二者的编码是否一直,另外你可以用alert()弹出看看返回的结果。
[/Quote]
周公 我用了alert了 返回结果始终是fasle 就是说我的查询方法根本没用 怎么的返回的都是false
不解...
周公 2008-10-30
  • 打赏
  • 举报
回复

function backInfo()
{
if(xmlHttp.readyState==4)
{
if(xmlHttp.status==200)
{
alert(xmlHttp.responseText);//这里调试一下看看到底是什么
if(xmlHttp.responseText=="true")
{
document.getElementById('message').innerHTML="对不起,此用户已存在!";
}
else
{
document.getElementById('message').innerHTML="恭喜您,此用户可注册!";
}
}
}
}

周公 2008-10-30
  • 打赏
  • 举报
回复
注意二者的编码是否一直,另外你可以用alert()弹出看看返回的结果。
周公 2008-10-30
  • 打赏
  • 举报
回复

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Javascript编写Ajax实例</title>
<script language="javascript">
var http_request = false;
function send_request(url) {
http_request = false;

if(window.XMLHttpRequest) {
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/html');
}
}
else if (window.ActiveXObject) {
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request)
{
window.alert("不能创建XMLHttpRequest对象实例.");
return false;
}
http_request.onreadystatechange = processRequest;

http_request.open("GET", url, false);
http_request.send(null);
}

function processRequest() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
//alert(http_request.responseText);
document.getElementById("result").innerHTML = http_request.responseText;
}
else
{
alert("您所请求的页面有异常。");
}
}
}

document.getElementById("result").innerHTML="正在查询,请稍候";
send_request('http://localhost/ajax.aspx');
}

</script>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
<input type="button" name="search" value="查询服务器时间" onClick="dosearch()"><br />
<span id="result"></span>
</form>
</body>
</html>
Eagle_ice 2008-10-30
  • 打赏
  • 举报
回复
TO:banmuhuangci
Page_Load 是空类型的 不能有返回值 所以我采取Response.Write输出的方式...
Eagle_ice 2008-10-30
  • 打赏
  • 举报
回复
TO:showbo AND fcuandy
我用IE+HttpWatch 检测数据 当输入汉字时 传过去的参数是乱码,但是5楼的 我用英文用户名(数据库中不存在)问题依旧啊 比如我输入aaa 值是传过来了 但是没有按照这个值去执行查询 可是我的查询方法没错啊?不解中...
Eagle_ice 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 showbo 的回复:]
可能是楼主的编码不一致,导致输入中文时服务器接受到乱码,这样当然返回的是false

试试这样


JScript codefunction checkUser(userName)
{
var url="DisposeEvent.aspx?Name="+encodeURI(userName)//编码;
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=backInfo;
xmlHttp.send(null);
}
[/Quote]
不行啊...我晕了...
Go 旅城通票 2008-10-30
  • 打赏
  • 举报
回复
可能是楼主的编码不一致,导致输入中文时服务器接受到乱码,这样当然返回的是false

试试这样

function checkUser(userName)
{
var url="DisposeEvent.aspx?Name="+encodeURI(userName)//编码;
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=backInfo;
xmlHttp.send(null);
}
fcuandy 2008-10-30
  • 打赏
  • 举报
回复
1,把 cs里 Request.QueryString["Name"].ToString() 改为 Request["Name"]
2,sql语句改为: if exists(select 1 from Users where UserName={0}) select 1 else select 0
3,关于xmlhttp 发送和接收的数据,建议用ff+firebug 或 ie+httpwatch 跟踪一下。
mrshelly 2008-10-30
  • 打赏
  • 举报
回复
if(xmlHttp.responseText=="true")
{
document.getElementById('message').innerHTML="对不起,此用户已存在!";
}else if(xmlHttp.responseText=="false")
{
document.getElementById('message').innerHTML="对不起,此用户已存在!";
}else {
document.getElementById('message').innerHTML="对不起,服务器小故障!";
}


用 FF+FireBug 查看一下服务器的返回吧..

很明显.你的处理页面返回 有问题.



处理页面是否加了 AutoEventWireup="false" CodeFile="******" 的东西?

我的页面一般这样写


<%@ Page Language="C#" Debug="true"%>
<%@ Import NameSpace="System" %>
<%@ Import NameSpace="System.Web" %>
<%@ Import NameSpace="System.Collections" %>
<%@ Import NameSpace="Newtonsoft.Json" %>
<script language="C#" runat="server">
Shelly.Product insProduct = new Shelly.Product();
Shelly.Category insCategory = new Shelly.Category();
Shelly.Template insTemplate = new Shelly.Template();

public void Page_load(object sender, EventArgs e){
String outType = (Request.QueryString["o"]!=null)?Request.QueryString["o"].ToString().Trim():"jssz";
String mod = (Request.QueryString["mod"]!=null)?Request.QueryString["mod"].ToString().Trim():"";
....
ZetaChow晓代码 2008-10-30
  • 打赏
  • 举报
回复
你使用AJAX传递GET参数没有问题,RESPONSE.WRITE出判断后的字符串值也没有问题,根据你描述的情况 EXIST始终未FALSE来看,应该是参数在传递过程中出现了偏差,建议在用参数进行数据库查询前使用.Trim()来去掉前后空格

直接执行LoadUserData(XX)看看是否能正确判断帐号是否存在。

你这段代码可以分部测试应该很快可以解决问题,另外,你代码里似乎判断嵌套得有点过多

这一段
public partial class DisposeEvent : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
User user = new User();
if (user.LoadUserData(Request.QueryString["Name"].ToString()))
{
Response.Write("true");
Response.End();
}
else
{
Response.Write("false");
Response.End();
}
}
}



可以改成

public partial class DisposeEvent : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
User user = new User();
return user.LoadUserData(Request.QueryString["Name"].ToString())).ToString();
}
}



另外 你使用了ExecuteScalar,通过获取count获取统计结果,但是实际上使用ExecuteNonQuery 查询语句就只写成select id from[XXX] where ..... 效率要高得多,并且不需要强制转换,ExecuteNonQuery就直接输出查询语句的影响行数(整型)


仔细测试下,应该问题不大!可能只是一时疏忽

aquariua 2008-10-29
  • 打赏
  • 举报
回复
沙发
最好的解决办法就是
JS回调
我最近做了个和你说的一样的功能,不过是ASP的 很简单,你的是ASP.NET不知道弄

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧