AJAX异步更改数据库

前段时间做了一个小网站,里面有个小功能感觉挺好的,在此与大家分享一下,还请各位大神不要笑话小弟的无知大笑

此功能大概是这个样子的:点击下图中的类别名称,就可以对类别进行修改。

点击类别名称以后,原来的表格变成一个可编辑的文本框,并全选里面的内容,此时可直接进行修改。回车或者鼠标点击其他地方,提交修改内容.

如果不做修改点击别处或者按“Esc”或回车键,就会回到之前的样子,如果修改后跟其他类名重复就会有相应的提示:

如果类名没问题就会将修改后的内容显示到页面,同时会修改数据库的值。

数据库修改前              数据库修改后

用到的js代码

[javascript] view plain copy
 
  1. /********************************************** 
  2. 创建人:刘水镜 
  3. 说明:    可编辑的表格 
  4. **********************************************/  
  5.   
  6. $(function () {    // 相当于在页面中的body标签加上onload事件  
  7.     $(".caname").click(function () {   // 给页面中有caname类的标签加上click函数  
  8.         var objTD = $(this);  
  9.         var oldText = $.trim(objTD.text());  // 保存老的类别名称  
  10.         var input = $("<input type='text' value='" + oldText + "' />"); // 文本框的HTML代码  
  11.         objTD.html(input);   // 当前td的内容变为文本框  
  12.         // 设置文本框的点击事件失效  
  13.         input.click(function () {  
  14.             return false;  
  15.         });  
  16.         // 设置文本框的样式  
  17.         input.css("border-width", "0px");  //边框为0  
  18.         input.height(objTD.height());   //文本框的高度为当前td单元格的高度  
  19.         input.width(objTD.width());    // 宽度为当前td单元格的宽度  
  20.         input.css("font-size", "16px");    // 文本框的内容文字大小为16px  
  21.         input.css("text-align", "center");   // 文本居中  
  22.         input.trigger("focus").trigger("select");   // 全选  
  23.   
  24.         // 文本框失去焦点时重新变为文本  
  25.         input.blur(function () {  
  26.             var newText = $(this).val(); // 修改后的名称  
  27.             var input_blur = $(this);  
  28.   
  29.             // 当老的类别名称与修改后的名称不同的时候才进行数据的提交操作  
  30.             if (oldText != newText) {  
  31.                 // 获取该类别名所对应的ID(序号)  
  32.                 var caid = $.trim(objTD.prev().text());  
  33.                 // AJAX异步更改数据库  
  34.                 var url = "../handler/ChangeCaName.ashx?caname=" + encodeURI(encodeURI(newText)) + "&caid=" + caid + "&t=" + new Date().getTime();  
  35.                 $.get(url, function (data) {  
  36.                     if (data == "false") {  
  37.                         alert("类别修改失败,请检查是否类别名称重复!");  
  38.                         input_blur.trigger("focus").trigger("select");   // 文本框全选  
  39.                     } else {  
  40.                         $("#test").text("");  
  41.                         objTD.html(newText);  
  42.                     }  
  43.                 });  
  44.             } else {  
  45.                 // 前后文本一致,把文本框变成标签  
  46.                 objTD.html(newText);  
  47.             }  
  48.         });  
  49.   
  50.         // 在文本框中按下键盘某键  
  51.         input.keydown(function (event) {  
  52.             var jianzhi = event.keyCode;  
  53.             var input_keydown = $(this);  
  54.   
  55.             switch (jianzhi) {  
  56.                 case 13: // 按下回车键 ,把修改后的值提交到数据库  
  57.                     // $("#test").text("您按下的键值是: " + jianzhi);  
  58.                     var newText = input_keydown.val(); // 修改后的名称  
  59.                     // 当老的类别名称与修改后的名称不同的时候才进行数据的提交操作  
  60.                     if (oldText != newText) {  
  61.                         // 获取该类别名所对应的ID(序号)  
  62.                         var caid = $.trim(objTD.prev().text());  
  63.                         // AJAX异步更改数据库  
  64.                         var url = "../handler/ChangeCaName.ashx?caname=" + encodeURI(encodeURI(newText)) + "&caid=" + caid + "&t=" + new Date().getTime();  
  65.                         $.get(url, function (data) {  
  66.                             if (data == "false") {                                 
  67.                                 alert("类别修改失败,请检查是否类别名称重复!");  
  68.                                 input_keydown.trigger("focus").trigger("select");   // 文本框全选  
  69.                             } else {  
  70.                                 $("#test").text("");  
  71.                                 objTD.html(newText);  
  72.                             }  
  73.                         });  
  74.                     } else {  
  75.                         // 前后文本一致,把文本框变成标签  
  76.                         objTD.html(newText);  
  77.                     }  
  78.                     break;  
  79.                 case 27: // 按下Esc键, 取消修改,把文本框变成标签  
  80.                     $("#test").text("");  
  81.                     objTD.html(oldText);  
  82.                     break;  
  83.             }  
  84.         });  
  85.   
  86.     });  
  87. });  
  88.   
  89.   
  90. // 屏蔽Enter按键  
  91. $(document).keydown(function (event) {  
  92.     switch (event.keyCode) {  
  93.         case 13: return false;  
  94.     }  
  95. });   





一般处理程序代码

[csharp] view plain copy
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using Model;using BLL;  
  6. namespace Web.handler  
  7. {  
  8.      /// <summary>   
  9.      /// ChangeCaName 的摘要说明   
  10.      /// </summary>   
  11.      public class ChangeCaName : IHttpHandler   
  12.      {   
  13.          public void ProcessRequest(HttpContext context)   
  14.          {   
  15.              context.Response.ContentType = "text/plain";   
  16.              string caid = context.Request.QueryString["caid"];   
  17.              string caname =context.Server.UrlDecode (context.Request.QueryString["caname"]);   
  18.              Category ca = new Category(caid, caname);   
  19.                
  20.              //判断是否已有该类别名   
  21.              CategoryManger camgr = new CategoryManger();  
  22.                
  23.              if (camgr.IsExist(caname))   
  24.              {   
  25.                  //存在   
  26.                  context.Response.Write("false");  
  27.                  return;   
  28.              }   
  29.              //更改数据库类别名   
  30.              bool b=camgr.Update( ca);   
  31.              if (b)   
  32.              {   
  33.                 context.Response.Write("true");   
  34.              }   
  35.              else   
  36.              {   
  37.                 context.Response.Write("false");   
  38.              }   
  39.          }   
  40.            
  41.          public bool IsReusable   
  42.          {   
  43.             get { return false; }   
  44.          }   
  45.      }  
  46.  }  

功能很简单,但用起来却非常的方便,个人觉得很好,请各位大神不要笑话在下的才疏学浅。

另外实现此效果需要用到JQuery的函数,在此附上JQuery的下载,有需要的朋友拿去。

jQuery源文件

原文地址:https://www.cnblogs.com/perrybalabala/p/5784083.html