实践技术点:1、AJax自定义封装

      2、后台序列化与反序列化JSON

      3、客户端解析JSON字符串,处理DOM

实现代码如下:

 1、JS脚本代码:

                1 /***

 NOTE:AJAX处理JS
TIME:2015-5-18 11:02:51
AUTHOR:宋梦澜 ***/ var AJax = function (handleUrl) {
this.Url = handleUrl ? handleUrl : "";
this.xmlHttpRequest = null; this.CallFunc = null; //回调函数
this.DataContent = null; //数据内容
}; AJax.prototype.CheckUrl = function () {
var bo = false;
//if (this.Url.indexOf('.') > 0)
if (this.Url.lastIndexOf('.') > 0) {
bo = true;
}
else {
bo = false;
}
return bo;
}; AJax.prototype.Init = function () {
//判断浏览器是否支持异步对象
if (window.XMLHttpRequest) {
this.xmlHttpRequest = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
try {
this.xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
this.xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
if (console && console.log) {
console.log("无法创建异步请求对象!");
}
}
}
}; function ProcessResponse(callFunc, obj) {
if (obj.readyState == 4 && obj.status == 200) {
var resultData = null;
var resultType = obj.getResponseHeader("Content-Type");
// switch (resultType) {
// case "image/Png" || "image/jpeg":
// resultData = obj.responseBody;
// break;
// case "text/xml; charset=gb2312" || "text/xml; charset=utf-8" || "text/xml;charset=gb2312" || "text/xml;charset=utf-8":
// resultData = obj.responseXML;
// break;
// case "text/html; charset=gb2312" || "text/html; charset=utf-8" || "text/html;charset=gb2312" || "text/html;charset=utf-8":
// resultData = obj.responseText;
// break;
// default:
// resultData = obj.responseStream;
//} if (resultType == "image/Png" || resultType == "image/jpeg") {
resultData = obj.responseBody;
}
else if (resultType == "text/xml; charset=gb2312" || resultType == "text/xml; charset=utf-8" || resultType == "text/xml;charset=gb2312" || resultType == "text/xml;charset=utf-8") {
resultData = obj.responseXML;
}
else if (resultType == "text/html; charset=gb2312" || resultType == "text/html; charset=utf-8" || resultType == "text/html;charset=gb2312" || resultType == "text/html;charset=utf-8") {
resultData = obj.responseText;
}
else {
resultData = obj.responseStream;
} if (resultData) {
//执行回调函数
callFunc(resultData);
}
else {
alert("接收服务器数据异常!");
}
//设置资源失效
delete resultData;
delete resultType;
//释放资源
//CollectGarbage();
//AJax.Dispose();
setTimeout(CollectGarbage, 3);
}
} AJax.prototype.Handle = function (callFunc, obj) {
this.xmlHttpRequest.onreadystatechange = function () { ProcessResponse(callFunc, obj); };
}; //在IE最小化时,IE会主动调用一次GC,
AJax.prototype.Dispose = function () {
if (this.xmlHttpRequest) {
this.xmlHttpRequest = null;
//delete this.xmlHttpRequest;
//释放资源(由于资源还在上下文中,立即调用GC并不会释放资源,故延时call GC)
//CollectGarbage();
setTimeout(CollectGarbage, 3);
}
}; AJax.prototype.SendRequest = function () {
if (this.CheckUrl()) {
this.Init();
if (this.CallFunc) {
if (this.xmlHttpRequest) {
this.xmlHttpRequest.open("POST", this.Url, true);
this.xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
//this.xmlHttpRequest.onreadystatechange = ProcessResponse;
this.Handle(this.CallFunc, this.xmlHttpRequest);
this.xmlHttpRequest.send(this.DataContent);
}
else {
this.xmlHttpRequest.abort();
this.Dispose();
alert("异步请求对象创建失败!");
}
}
else {
this.Dispose();
alert("请设置回调函数!");
}
}
else {
alert("非法地址!");
}
};

2、后台处理页面代码:

 protected void Page_Load(object sender, EventArgs e)
{
DataAction();
} private void ResponseWrite(string contentType, string chartSet, string contentEncoding, Object obj)
{
//Response.ContentType = "text/html";
//Response.Charset = "gb2312";
//Response.ContentEncoding = Encoding.GetEncoding("GB2312");
//Response.Write(ModelAdd());
//Response.Flush();
//Response.End(); Response.ContentType = contentType;
Response.Charset = chartSet;
Response.ContentEncoding = Encoding.GetEncoding(contentEncoding);
Response.Write(obj);
Response.Flush();
//Response.End();
HttpContext.Current.ApplicationInstance.CompleteRequest();
} private void DataAction()
{
string actionFlag = Request.QueryString["flag"];
switch (actionFlag)
{
case "add":
ModelAdd();
break;
case "img":
ImgUpdate();
break; default:
break;
} } #region ADDMODEL private void ModelAdd()
{
string strJson = "";
MODEL_Meidicine model = DataAdd();
MemoryStream ms = new MemoryStream();
DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(MODEL_Meidicine));
json.WriteObject(ms, model);
strJson = Encoding.UTF8.GetString(ms.ToArray());
ms.Flush();
ms.Close(); ResponseWrite("text/html", "gb2312", "GB2312", strJson);
} private MODEL_Meidicine DataAdd()
{
MODEL_Meidicine model = new MODEL_Meidicine();
model.Id = (new Random()).Next();
model.Namec = "胰岛素注射剂";
model.Newid = Guid.NewGuid().ToString();
model.Medicinemodel = "粉针剂";
model.Outlookc = "0.6/mg";
model.Memo2 = "";
model.Jkycj = "江苏正大天晴药业股份有限公司";
return model;
} #endregion #region IMGUPDATE private void ImgUpdate()
{
string imgUrl = "";
Random rad = new Random();
imgUrl = "Images/" + rad.Next() + ".JPG";
ResponseWrite("text/html", "utf-8", "UTF-8", imgUrl);
} #endregion

4、JSON实体类代码:

 [DataContract]
public class MODEL_Meidicine
{
private string _newid; [IgnoreDataMember]
public string Newid
{
get { return _newid; }
set { _newid = value; }
} private int _id;
[DataMember(Name = "ID")]
public int Id
{
get { return _id; }
set { _id = value; }
} private string _namec;
[DataMember(Name = "NAMEC")]
public string Namec
{
get { return _namec; }
set { _namec = value; }
} private string _medicinemodel;
[DataMember(Name = "MEDICINEMODEL")]
public string Medicinemodel
{
get { return _medicinemodel; }
set { _medicinemodel = value; }
} private string _outlookc;
[DataMember(Name = "OUTLOOKC")]
public string Outlookc
{
get { return _outlookc; }
set { _outlookc = value; }
} private string _memo2;
[DataMember(Name = "MEMO2")]
public string Memo2
{
get { return _memo2; }
set { _memo2 = value; }
} private string _jkycj;
[DataMember(Name = "JKYCJ")]
public string Jkycj
{
get { return _jkycj; }
set { _jkycj = value; }
} }

3、前台显示及调用代码:

调用脚本“

 <script src="Scripts/AJax.js" type="text/javascript" language="javascript"></script>
<script type="text/javascript" language="javascript">
//var temp = msg();
// var temps = new msg();
// alert(temps.kk);
//AJax.SendRequest(); function Update() {
var aJax = new AJax();
aJax.Url = "AJaxHandle.aspx?flag=add";
aJax.DataContent = "txt=" + escape("你好") + "&key=sf46bs9vftr";
aJax.CallFunc = function (result) { UIAction(result); };
aJax.SendRequest();
} function UIAction(res) {
var obj = eval('(' + res + ')');
var tbl = document.getElementById("tblResult");
var row = tbl.insertRow(tbl.rows.length);
row.insertCell(0).innerText = obj.ID;
row.insertCell(1).innerText = obj.NAMEC;
row.insertCell(2).innerText = obj.MEDICINEMODEL;
row.insertCell(3).innerText = obj.OUTLOOKC;
row.insertCell(4).innerText = obj.MEMO2;
row.insertCell(5).innerText = obj.JKYCJ;
} function updateImg() {
var aJax = new AJax();
aJax.Url = "AJaxHandle.aspx?flag=img";
aJax.DataContent = "txt=" + escape("你好") + "&key=sf46bs9vftr";
aJax.CallFunc = function (result) { document.getElementById("imgObj").src = result; };
aJax.SendRequest();
} </script>

html代码:

 <div>
<table id="tblResult" style="border-width: 12px; border-color: Black;">
<thead>
<th style="width: auto;">
ID
</th>
<th style="width: auto;">
NAMEC
</th>
<th style="width: auto;">
MEDICINEMODEL
</th>
<th style="width: auto;">
OUTLOOKC
</th>
<th style="width: auto;">
MEMO2
</th>
<th style="width: auto;">
JKYCJ
</th>
</thead>
<tbody>
<td>
0
</td>
<td>
</td>
<td>
</td>
<td>
</td>
<td>
</td>
<td>
</td>
</tbody>
</table>
<div style="text-align: center;">
<img id="imgObj" src="" alt="随机更新" />
</div>
<div style="text-align: center;">
<input id="" type="button" onclick="Update();" value="更新" />
<input id="" type="button" onclick="updateImg();" value="更新图片" />
</div>
</div>

封装AJax实现JSON前台与后台交互的更多相关文章

  1. jquery ajax返回json数据进行前后台交互实例

    jquery ajax返回json数据进行前后台交互实例 利用jquery中的ajax提交数据然后由网站后台来根据我们提交的数据返回json格式的数据,下面我来演示一个实例. 先我们看演示代码 代码如 ...

  2. 通过ajax把json对象传入后台

    一.前台ajax部分 function icheckDelete(url){ var parms = { list : array //这是个数组 }; $.ajax({ dataType: &quo ...

  3. Javascript 中ajax实现前台向后台交互

    第一种情况:前台传入字符串参数 后台返回json字符串.或是json数组  代码如下: 前台: $.ajax({ url: "xxx/xxx.action", data: &quo ...

  4. asp.net MVC ajax 请求参数前台加密后台解密

    最近有一个需求要求页面查询数据库,查询内容保存到excel里面作为附件加密打包下载.查询的sql作为参数传入后台,实现加密提交.这里做个记录,后面用到直接来拿. 控制器 public ActionRe ...

  5. ajax学习----json,前后端交互,ajax

    json <script> var obj = {"name": "xiaopo","age": 18,"gender ...

  6. Echarts 使用asp.net +ashx+ajax 实现 饼图、柱形图后台交互

    向上效果图 前端code /* * ------------------------------------------------------------------ * module-inform ...

  7. Jquery EasyUI +Ajax +Json +一般处理程序 实现数据的前台与后台的交互 --- 善良公社项目

    经过上一篇博客,本节主要是来看实现的功能是后台的数据通过json数据传过来,前台修改的数据再传回数据库之后页面再次更新table中的数据: 图示: 实例:前台的代码 <%--表格显示区--%&g ...

  8. ajax请求后台交互json示例

    ajax请求,首先需要服务器(首先你需要node) npm i -g http-server 其次,进入当前目录(默认服务器端口8080) http-server 点击进入:localhost:808 ...

  9. springMVC中前台ajax传json数据后台controller接受对象为null

    在jquery的ajax中,如果没加contentType:"application/json",那么data就应该对应的是json对象,反之,如果加了contentType:&q ...

随机推荐

  1. GDB基本命令(整合)(转)

    directory:添加源文件目录 l src.cpp:line_num可进入文件 如:l src.cpp:10 回车自动重复上一命令 一.gdb调试基本知识a.调试器指示的是将要执行的代码行b.只有 ...

  2. Qt Creator项目中使用qss

    近期学习qt .使用的编译器是qt creator ,学习过程中遇到的题就是 怎样将程序中将要用到的.qss 文件静态编译到.exe程序中,而不是在程序执行时动态加载.动态加载的最大问题在于一旦.qs ...

  3. sql笔记 获取指定数据库下的所有表

    SELECT Name FROM 数据库名称..SysObjects Where XType='U' ORDER BY Name XType='U' 标识查询用户创建的表 S为系统创建的表

  4. C# 获取当前路径方法(转)

    C# 获取当前路径方法 //获取包含清单的已加载文件的路径或 UNC 位置. public static string sApplicationPath = Assembly.GetExecuting ...

  5. C语言基础(15)-多文件编译

    一.头文件的使用 如果把main函数放在第一个文件中,而把自定义函数放在第二个文件中,那么就需要在第一个文件中声明函数原型.如果把函数原型包含在一个头文件里,那么就不必每次使用函数的时候都声明其原型了 ...

  6. LNMP平滑升级nginx并安装ngx_lua模块教程

    #ngx_lua module项目地址 https://github.com/chaoslawful/lua-nginx-module 在LNMP安装包后,重编译nginx,并添加ngx_lua模块 ...

  7. linux mount-umount命令常用记录

    每次挂在u盘都忘记,这次记录下. umount命令: 必杀:umount -l /dev/sda1 (有时候卸载不能卸,加-l(不是1,是小写字母l)参数,表示在设备不忙时卸载设备,就可成功卸载设备) ...

  8. CI框架基本配置/教你学习CI框架codelgniter

    CI框架现在中国可以说还是不成熟,不像thinkphp那样有那么多的中文手册,在国内,很多国人英语都很烂,CI现在教程还是不多.大家心里都存在这严重想法 CI 框架现在中国可以说还是不成熟,不像thi ...

  9. nginx+python+fastcgi环境配置(flup版本)

    昨天花了一整天的时间研究搭建了nginx+python+fastcgi环境,并测试没问题,由于是第一次,并且参考了网上很多东西,网上也有很多,但还是把自己的过程记录下. 主要感谢这位兄弟的文章给了我很 ...

  10. 解决Bootstrap 试用手机端 布满全屏

    @media (max-width: 767px) { body{ margin: 0; padding: 0; } } @media (max-width: 970px) { body{ margi ...