zoukankan      html  css  js  c++  java
  • ajax的简单应用

    最近搞一个学习码的验证,为了客户体验,需用到ajax。首页通过自定义一个验证控件进行验证:

    <asp:CustomValidator ID="CustomValidator2" runat="server" Display="Dynamic"
    ErrorMessage="学习码不对" ForeColor="Red" ClientValidationFunction="learnCode" ValidationGroup="questions"></asp:CustomValidator>
    其中 learnCode函数的js代码如下:
        <script type="text/javascript">
            function learnCode(sender, args) {
                var state1 = learnCheck();
                //alert(state1);
                if (state1 == "1") {
                    args.IsValid = true;
                }
                else {
                    args.IsValid = false;
                }
            }
     
        </script>
    其中learnCheck()函数为ajax中js的一个函数,在页面引用该js文件
        <script src="js/learnCode.js" type="text/javascript"></script>
    

    learnCode.js文件中的代码如下:

    var XMLHttpReq = false;
    var learnCodeState; //定义学习码的状态,错误为0,默认为错误
    //创建XMLHttpRequest对象       
    function createXMLHttpRequest() {
        if (window.XMLHttpRequest) { //Mozilla 浏览器
            XMLHttpReq = new XMLHttpRequest();
        }
        else if (window.ActiveXObject) { // IE浏览器
            try {
                XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) { }
            }
        }
    }
    //发送请求函数
    function sendRequest(url) {
        createXMLHttpRequest();
        XMLHttpReq.open("GET",url, false);
        XMLHttpReq.onreadystatechange = processResponse; //指定响应函数
        XMLHttpReq.send(null);  // 发送请求
    }
    // 处理返回信息函数
    function processResponse() {
        if (XMLHttpReq.readyState == 4) { // 判断对象状态
            //alert(XMLHttpReq.status);
            if (XMLHttpReq.status == 200) { // 信息已经成功返回,开始处理信息
                var res = XMLHttpReq.responseText;
                if (res == "1") {
                    learnCodeState = "1";
                    return;
                }
                else {
                    learnCodeState = "0";
                    return;
                }
            } else { //页面不正常
                window.alert("您所请求的页面有异常。");
            }
        }
    
    }
    // 身份验证函数
    function learnCheck() {
        //sendRequest('CheckLearnCode.aspx?learnCode=' + document.getElementById("txtLearnCode").value+"&t=" + Math.random());
        var num = Math.random();
        //alert(document.getElementById("txtLearnCode").value);
        var code =encodeURI(document.getElementById("txtLearnCode").value);
        //alert(code);
        sendRequest('CheckLearnCode.aspx?learnCode=' +code + '&t=' + num);
        return learnCodeState;
    }

    这里因为我要及时获取js文件返回的learnCodeState值,所以使用了同步刷新,即:

    XMLHttpReq.open("GET",url, false);

    如果使用异步,则改为:XMLHttpReq.open("GET",url, true);

    但使用同步刷新时也有个问题,浏览器会保存有缓存,当我的学习码改变了,浏览器还是保留上一次的学习码,后来一看原来是传送的url的问题,因为每次传送的url相同的话,浏览器则会去取上一次保留的值。为了解决这个问题,我需要将url改为每次都不一样。

    设置一个随机数

    var num = Math.random();
    然后加在url后面,让url每次都不同 
    sendRequest('CheckLearnCode.aspx?learnCode=' +code + '&t=' + num); 同时为了传送中文参数时出现乱码,则会参数进行编码,如下
     var code =encodeURI(document.getElementById("txtLearnCode").value);
    服务器文件CheckLearnCode.aspx.cs的代码如下:
    public partial class CheckLearnCode : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           string learnCode =Server.UrlDecode(Request.QueryString["learnCode"].ToString());
            string sql = "select top 1 * from LearnCode";
    
            string result = "0";//默认为不成功
    
          DataSet ds = SqlHelper.ExecuteDataset(SqlHelper.conn, CommandType.Text, sql);
          if (ds.Tables[0].Rows.Count>0)
          {
              string code = ds.Tables[0].Rows[0]["LearnCode"].ToString();
              if (code == learnCode)
                  result="1";//学习码匹配成功
          }
          Response.Write(result);
          Response.End();
        }
    }

    这样,整个ajax验证终于搞定。

  • 相关阅读:
    SQLServer中重建聚集索引之后会影响到非聚集索引的索引碎片吗
    设计表的时候,对于自增列做物理主键使用的一点思考
    MySQL慢查询日志相关的配置和使用。
    Python文件操作---合并文本文件内容
    浅析SQL Server在可序列化隔离级别下,防止幻读的范围锁的锁定问题
    从一个简单的约束看规范性的SQL脚本对数据库运维的影响
    (译)内存沉思:多个名称相关的神秘的SQL Server内存消耗者。
    初试Python语法小试牛刀之冒泡排序
    浅析MySQL中的Index Condition Pushdown (ICP 索引条件下推)和Multi-Range Read(MRR 索引多范围查找)查询优化
    MySQL执行计划extra中的using index 和 using where using index 的区别
  • 原文地址:https://www.cnblogs.com/bianlan/p/2597133.html
Copyright © 2011-2022 走看看