xmlHttp.responseText未知错误定义

时间:2012-08-30 11:15:14

标签: javascript asp.net sql sql-server xmlhttprequest

我在html(使用xmlHttp.responseText)页面中创建了一个javascript,我从aspx页面请求一个值,该页面查询数据库(MSSQL)中用户名的用户名。当我加载HTML(IE8)时,我得到了这个“未知的运行时错误行:30”。应该是什么导致了这个问题?需要帮忙。这是我的代码:

  1. 这是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>
    

  2. 这是我的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();
    
      }
    
  3. 真的应对任何回复。谢谢。

1 个答案:

答案 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();
}