hello

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

 

 

posted @ 2012-07-18 11:46  B追风少年  阅读(247)  评论(0编辑  收藏  举报

hello too