加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ajax使用小结

发布时间:2020-12-15 22:09:38 所属栏目:百科 来源:网络整理
导读:项目真正使用,不可能每一条处理就刷新页面与服务器交互提交一次;也不能在后台每处理一次就刷新页面与服务器交互,所以在这里使用Ajax非常必要,以下就以简单的例子说明Ajax在此的使用过程。 添加属性 textBox.Attributes.Add("Onblur","javascript:return

项目真正使用,不可能每一条处理就刷新页面与服务器交互提交一次;也不能在后台每处理一次就刷新页面与服务器交互,所以在这里使用Ajax非常必要,以下就以简单的例子说明Ajax在此的使用过程。

添加属性

textBox.Attributes.Add("Onblur","javascript:return CheckFraction(event.srcElement)&&JudgeQuestions('" + tableName.Trim() + "','" + id + "','" + textBox.ID + "')");

JS代码

//声明XMLHttpRequest对象
var xmlHttp;
function createXMLHTTP() {
    if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest(); //其它浏览器
    }
    else if (window.ActiveXObject) {
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); //IE老版本
        }
        catch (e)
        { }
        try {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); //IE新版本 
        }
        catch (e) {
            alert('创建XMLHTTP对象失败!');
        }

        if (!xmlHttp) {
            window.alert("不能创建XMLHttpRequest对象实例!");
            return false;

        }
    }
}

function JudgeQuestions(tableName,questionId,TextBoxId) {
    
    //读取分数ctl00$ContentPlaceHolder1$t_
    TextBoxId = "ContentPlaceHolder1_" + TextBoxId;
    var fraction = document.getElementById(TextBoxId).value;
    var pattern = /^[0-9]+(.[0-9]{1})?|([0-9]|[1-9][0-9]|100)$/;
    var flag = pattern.test(fraction);
    if (flag == false) {

        alert("分数应该是数字类型");
        return false;
    }
    createXMLHTTP(); //创建XMLHttpRequest对象
    var url = "MarkToServer.aspx?tableName=" + tableName + "&id=" + questionId + "&fraction=" + fraction + "&Event=" + "Judge";
    xmlHttp.open("Post",url,true);
    xmlHttp.onreadystatechange = JudgeResult;
    xmlHttp.send(null);
}

//判断判卷是否成功
function JudgeResult() {
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            if (xmlHttp.responseText == "true") {
            }
            else {
                alert("评分失败,请重新评分或者联系管理员");

            }
        }
    }
}

MarkToServer.aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web.Security;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using ExamSys.Pages.Common;
using Entity;
using BLL.BLLPaperManage;

public partial class Pages_UIPaperManage_MarkToServer : System.Web.UI.Page
{
    OnlineMarkBLL markBLL = new OnlineMarkBLL();

    protected void Page_Load(object sender,EventArgs e)
    {
        //分别得到数据表名称、试题id、试题所得分数
        string tableName = Request.QueryString["tableName"].ToString();
        int id = Convert.ToInt32(Request.QueryString["id"].ToString());
        int fraction = Convert.ToInt32(Request.QueryString["fraction"].ToString());

        if (Request.QueryString["Event"].ToString() == "Judge")
        {
            if (markBLL.UpdateOneQuestionRecordFraction(tableName,id,fraction))
            {

                Response.Write("true");
                Response.End();

            }
            else
            {
                Response.Write("false");
                Response.End();
            }
        }
    }
}

BLL层

/// <summary>
/// 更新一条答题记录
/// </summary>
/// <returns></returns>
public bool UpdateOneQuestionRecordFraction(string tableName,int id,int fraction)
{
    onlineMarkDAL.ModifyFraction(tableName,fraction);
    return true;
}
DAL层

    /// 更改评分
    /// </summary>
    /// <param name="id"></param>
    /// <param name="fraction"></param>
    /// <returns></returns>
    public bool ModifyFraction(string tableName,long id,int fraction)
    {
        try
        {
            string cmdText = "";
            //定义存储过程字符串,并且赋值
            cmdText = "update " + tableName + " set fraction=@fraction where id=@id";

            //给参数赋值
            SqlParameter[] paras = new SqlParameter[]{
            new SqlParameter ("@id",id ),new SqlParameter ("@fraction",fraction )};
            //执行命令
            if (SQLHelper.ExecuteNonQuery(cmdText,paras,CommandType.Text) >= 0)
            {
                return true;
            }

            return false;
        }
        catch (Exception e)
        {

            throw e;
        }
        finally {
            SQLHelper.Close();
        }
    }
}

原理比较简单,就是给TextBox控件添加属性,当焦点离开时触发JS的JudgeQuestions函数,JS再与MarkToServer.aspx交互(使用ashx更好),再就是常见的三层结构:UI层调用BLL层的UpdateOneQuestionRecordFraction,BLL层再调用DAL层的ModifyFraction函数即可(实体层和SQLHelper省略)。

难的不是怎么使用,而是在什么时候想到使用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读