我在html(使用xmlHttp.responseText)页面中创建了一个javascript,我从aspx页面请求一个值,该页面查询数据库(MSSQL)中用户名的用户名。当我加载HTML(IE8)时,我得到了这个“未知的运行时错误行:30”。应该是什么导致了这个问题?需要帮忙。这是我的代码:
这是HTML页面和Javascript:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function showUsernum(str)
{
var xmlHttp;
if (str=="")
{
document.getElementById("textExists").innerHTML="";
return;
}
if (window.xmlHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlHttp=new xmlHttpRequest();
}
else
{// code for IE6, IE5
xmlHttp=new ActiveXObject("Microsoft.xmlHttp");
}
xmlHttp.onreadystatechange=function()
{
if (xmlHttp.readyState==4 && xmlHttp.status==200)
{
//alert(str);
document.getElementById("textExists").innerHTML=xmlHttp.responseText;
}
}
xmlHttp.open("GET","http://localhost/Base_Data/default.aspx?q="+str,true);
xmlHttp.send();
}
</script>
</head>
<body>
<form action="" method="post">
<label>UserName
<input type="text" name="textUser" id="textUser" onchange="showUsernum(this.value)">
</label>
</form>
<br/>
<div >
<form name="form1" method="post" action="">
<label>
<div id="textExists">Exists?</div>
</label>
</form>
</div>
</body>
这是我的ASP代码。
protected void Page_Load(object sender, EventArgs e)
{
Response.Expires = -1;
SqlConnection conn;
string connection = ConfigurationManager.ConnectionStrings ["BaseData"].ConnectionString;
conn = new SqlConnection(connection);
string sql = "SELECT USERNUM FROM useraccount WHERE USERNAME ='" + Request.QueryString["q"] + "'";
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
string contNm = Convert.ToString(cmd.ExecuteScalar());
Response.Write("textExists=" + contNm );
conn.Close();
}
真的应对任何回复。谢谢。
答案 0 :(得分:0)
问题在于您尝试将整个页面(包括<html>
标记和所有内容)分配到单个DOM元素中,而IE并不是真的喜欢它。
要让服务器只发送没有整个文档的原始HTML,您需要清除响应。此外,您没有正确处理数据库对象,并且您遇到SQL注入攻击,因此优化的代码将是:
string connection = ConfigurationManager.ConnectionStrings ["BaseData"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connection))
{
conn.Open();
string sql = "SELECT USERNUM FROM useraccount WHERE USERNAME=@user";
string contNm = "";
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@user", Request.QueryString["q"]);
contNm = Convert.ToString(cmd.ExecuteScalar());
}
Response.Clear();
Response.Write("textExists=" + contNm);
Response.End();
conn.Close();
}