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

 

 

你可能感兴趣的:(Ajax)