zoukankan      html  css  js  c++  java
  • AJAX练习(一):制作可以自动校验的表单(从原理上分析ajax的作用)

    继上文(AJAX(一)AJAX的简介和基础)作为联系。

    传统网页在注册时检测用户名是否被占用,传统的校验显然缓慢笨拙。

    当ajax出现后,这种体验有了很大的改观,因为在用户填写表单时,签名的表单项已经发送给了服务器,然后根据用户填写好的内容进行数据查询。在查询号无需页面刷新就自动给了提示。类似这样的应用大大的提高了用户的体验,本节简单介绍自动校验表单制作方法。从原理上分析ajax的作用。

    1.搭建框架

    首先为html框架

        <form name="register">
                <p><label for = "User">输用户名<input type="text" name="User" id="User"></label><span id="UserResult"></span></p>
                <p><label for = "passwd1">输入密码<input type="password" name="passwd1" id="passwd1"></label></p>
                <p><label for = "passwd2">重复输入<input type="password" name="passwd2" id="passwd2"></label></p>
                <p><input type="submit" value="注册"></p>
                <p><input type="reset" value="重置"></p>
            </form>

    2.建立异步请求

    当用户输完“用户名”开始输入别的表单时进行后台校验,代码如下:

    输用户名<input type="text" name="User" id="User" onblur="startCheck(this)">

    在函数startCheck()中,直接发送this关键字,将文本框对象自己作为参数传递,而函数本身则首先判断用户是否输入为空,如果为空,则直接返回,并聚焦用户名文本框,给出相应的提示。

    function startCheck(oInput){
                    //判断是否有输入,没有输入则直接返回。
                    if(!oInput.value){
                        oInput.focus();//聚焦到用户名文本框
                        document.getElementById("User").innerHTML="用户名不能为空";
                        return;
                    }
                    //创建异步请求
                    //....
                }

    当用户输入用户名后,用toLowerCase()转化为小写字母,并建立异步请求。

    其中showResult()函数用于显示服务器处理返回的responseText文本。

    <script type="text/javascript">
                var xmlHttp;
    
                function createXMLHttprequest() {
                    if (window.ActiveXObject)
                        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                    else if (window.XMLHttpRequest)
                        xmlHttp = new XMLHttpRequest();
                }
    
                function startCheck(oInput) {
                    //判断是否有输入,没有输入则直接返回。
                    if (!oInput.value) {
                        oInput.focus(); //聚焦到用户名文本框
                        document.getElementById("User").innerHTML = "用户名不能为空";
                        return;
                    }
                    //创建异步请求
                    createXMLHttpRequest();
                    var sUrl = "1-9.aspx?user=" + oInput.value.toLowerCase() + "&timestamp=" + new Date().getTime();
                    xmlHttp.open("GET", sUrl, true);
                    xmlHttp.onreadystatechange = function() {
                        if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
                            showResult(xmlHttp.responseText); //显示服务结果
                    }
                    xmlHttp.send(null);
                }
            </script>

    3.服务器处理

    <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>
    <%@ Import Namespace="System.Data" %>
    <%
        Response.CacheControl = "no-cache";
        Response.AddHeader("Pragma","no-cache");
        
        if(Request["user"]=="isaac")
            Response.Write("Sorry, " + Request["user"] + " already exists.");
        else
            Response.Write(Request["user"]+" is ok.");
    %>

    4.显示异步查询的结果

    在用户输入表单其它项目时,异步返回结果已经在后台悄悄完成。

    function showResult(sText) {
                    var oSpan = document.getElementById("UserResult");
                    oSpan.innerHTML = sText;
                    if (sText.indexOf("already exists") >= 0)
                    //如果用户名已被占用
                        oSpan.style.color = "red";
                    else
                        oSpan.style.color = "black";
                }

    以上代码是对服务器返回结果的显示。

    该案例的完整代码

    <!DOCTYPE html>
    <html>
    
        <head>
            <meta charset="utf-8">
            <title></title>
        </head>
    
        <body>
            <script type="text/javascript">
                var xmlHttp;
    
                function createXMLHttpRequest() {
                    if (window.ActiveXObject)
                        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                    else if (window.XMLHttpRequest)
                        xmlHttp = new XMLHttpRequest();
                }
    
                function showResult(sText) {
                    var oSpan = document.getElementById("UserResult");
                    oSpan.innerHTML = sText;
                    if (sText.indexOf("already exists") >= 0)
                    //如果用户名已被占用
                        oSpan.style.color = "red";
                    else
                        oSpan.style.color = "black";
                }
    
                function startCheck(oInput) {
                    //首先判断是否有输入,没有输入直接返回,并提示
                    if (!oInput.value) {
                        oInput.focus(); //聚焦到用户名的输入框
                        document.getElementById("UserResult").innerHTML = "用户名不能为空";
                        return;
                    }
                    //创建异步请求
                    createXMLHttpRequest();
                    var sUrl = "1-9.aspx?user=" + oInput.value.toLowerCase() + "&timestamp=" + new Date().getTime();
                    xmlHttp.open("GET", sUrl, true);
                    xmlHttp.onreadystatechange = function() {
                        if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
                            showResult(xmlHttp.responseText); //显示服务器结果
                    }
                    xmlHttp.send(null);
                }
            </script>
            <form name="register">
                <p>
                    <label for="User">输用户名
                        <input type="text" name="User" id="User" onblur="startCheck(this)">
                    </label><span id="UserResult"></span>
                </p>
                <p>
                    <label for="passwd1">输入密码
                        <input type="password" name="passwd1" id="passwd1">
                    </label>
                </p>
                <p>
                    <label for="passwd2">重复输入
                        <input type="password" name="passwd2" id="passwd2">
                    </label>
                </p>
                <p>
                    <input type="submit" value="注册">
                </p>
                <p>
                    <input type="reset" value="重置">
                </p>
            </form>
        </body>
    
    </html>
  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    22. Generate Parentheses (backTracking)
    21. Merge Two Sorted Lists
    20. Valid Parentheses (Stack)
    19. Remove Nth Node From End of List
    18. 4Sum (通用算法 nSum)
    17. Letter Combinations of a Phone Number (backtracking)
    LeetCode SQL: Combine Two Tables
    LeetCode SQL:Employees Earning More Than Their Managers
  • 原文地址:https://www.cnblogs.com/ahthw/p/4230067.html
Copyright © 2011-2022 走看看