首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET AJAX 即時檢查用戶名唯一性:XmlHttp 非同步回傳、onblur 觸發、後端資料庫驗證完整實作

     編輯:關於ASP.NET

使用者輸入用戶名、移開焦點 (onblur) 即時檢查是否已存在,無需點擊按鈕、無需整頁重新整理。經典 AJAX (XmlHttp) 實作範例。

前端頁面 (Register.aspx)

<script type="text/javascript">
var xmlHttp = null;

function CheckUser() {
    var txt = document.getElementById("Text1");
    if (!txt.value.trim()) return;

    // 建立 XmlHttp (相容 IE6 ActiveX / 標準)
    try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); }
    catch { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch { xmlHttp = new XMLHttpRequest(); } }

    var url = "CheckUser.aspx?User=" + encodeURIComponent(txt.value);
    xmlHttp.open("GET", url, true);
    xmlHttp.onreadystatechange = OnCheckComplete;
    xmlHttp.send(null);
}

function OnCheckComplete() {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
        var result = xmlHttp.responseText; // "存在" 或 "不存在"
        var lbl = document.getElementById("exists");
        lbl.innerHTML = result;
        lbl.style.color = (result == "存在") ? "red" : "green";
    }
}
</script>

<input type="text" id="Text1" onblur="CheckUser()" />
<label id="exists"></label>

後端檢查頁面 (CheckUser.aspx.cs)

protected void Page_Load(object sender, EventArgs e)
{
    Response.Clear();
    Response.ContentType = "text/plain; charset=utf-8";

    string user = Request.QueryString["User"];
    if (string.IsNullOrEmpty(user)) { Response.Write("參數錯誤"); return; }

    // 實際專案請使用參數化查詢 / ORM / 儲存程序
    bool exists = UserExistsInDatabase(user);

    Response.Write(exists ? "存在" : "不存在");
    Response.End();
}

private bool UserExistsInDatabase(string username)
{
    // 範例:Entity Framework / ADO.NET / Dapper
    using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Conn"].ConnectionString))
    {
        return conn.ExecuteScalar("SELECT COUNT(1) FROM Users WHERE Username=@U", new { U = username }) > 0;
    }
}

現代化改良建議

痛點改良方案
原生 XmlHttp 繁瑣、無 Promise使用 fetch() + async/await 或 axios/jQuery.ajax
GET 請求參數長度限制、安全性改用 POST + JSON Body,加入 ValidateAntiForgeryToken
頻繁觸發 (使用者連續輸入)加入 防抖:setTimeout/clearTimeout 300ms 後再發請求
回傳純文字,擴充性差回傳 JSON:{ exists: true, message: "用戶名已被註冊", suggestion: "user123" }
無載入狀態提示請求前顯示 Spinner,完成後移除

防抖版本 (Vanilla JS)

let debounceTimer;
function CheckUser() {
    clearTimeout(debounceTimer);
    debounceTimer = setTimeout(() => {
        fetch(`CheckUser.ashx?User=${encodeURIComponent(Text1.value)}`)
            .then(r => r.json())
            .then(data => {
                exists.textContent = data.message;
                exists.className = data.exists ? "error" : "success";
            });
    }, 300);
}

即時用戶名檢查是提升註冊轉換率的關鍵 UX,現代專案請採用 Fetch + 防抖 + JSON + 防偽造 Token 的完整模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved