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验证终于搞定。

  • 相关阅读:
    使用GoogleCode作SVN服务器的一些问题及解决办法
    【转】hibernate中的映射文件xxx.hbm.xml详解总结
    Connection cannot be null when 'hibernate.dialect' not set
    <mvc:view-controller path=""/>标签的作用
    mysql 5.7.18版本 sql_mode 问题
    搭建Spring所需的各类jar包汇总详解
    WEB-INF目录与META-INF目录的作用
    【转】NPIV
    Java中继承thread类与实现Runnable接口的区别
    centos6.5 配置本地yum源
  • 原文地址:https://www.cnblogs.com/bianlan/p/2597133.html
Copyright © 2011-2022 走看看