封装AJax实现JSON前台与后台交互
实践技术点: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前台与后台交互的更多相关文章
- jquery ajax返回json数据进行前后台交互实例
jquery ajax返回json数据进行前后台交互实例 利用jquery中的ajax提交数据然后由网站后台来根据我们提交的数据返回json格式的数据,下面我来演示一个实例. 先我们看演示代码 代码如 ...
- 通过ajax把json对象传入后台
一.前台ajax部分 function icheckDelete(url){ var parms = { list : array //这是个数组 }; $.ajax({ dataType: &quo ...
- Javascript 中ajax实现前台向后台交互
第一种情况:前台传入字符串参数 后台返回json字符串.或是json数组 代码如下: 前台: $.ajax({ url: "xxx/xxx.action", data: &quo ...
- asp.net MVC ajax 请求参数前台加密后台解密
最近有一个需求要求页面查询数据库,查询内容保存到excel里面作为附件加密打包下载.查询的sql作为参数传入后台,实现加密提交.这里做个记录,后面用到直接来拿. 控制器 public ActionRe ...
- ajax学习----json,前后端交互,ajax
json <script> var obj = {"name": "xiaopo","age": 18,"gender ...
- Echarts 使用asp.net +ashx+ajax 实现 饼图、柱形图后台交互
向上效果图 前端code /* * ------------------------------------------------------------------ * module-inform ...
- Jquery EasyUI +Ajax +Json +一般处理程序 实现数据的前台与后台的交互 --- 善良公社项目
经过上一篇博客,本节主要是来看实现的功能是后台的数据通过json数据传过来,前台修改的数据再传回数据库之后页面再次更新table中的数据: 图示: 实例:前台的代码 <%--表格显示区--%&g ...
- ajax请求后台交互json示例
ajax请求,首先需要服务器(首先你需要node) npm i -g http-server 其次,进入当前目录(默认服务器端口8080) http-server 点击进入:localhost:808 ...
- springMVC中前台ajax传json数据后台controller接受对象为null
在jquery的ajax中,如果没加contentType:"application/json",那么data就应该对应的是json对象,反之,如果加了contentType:&q ...
随机推荐
- 批量杀进程 ps awk grep
ps aux |grep lt-newindexclient |grep -v grep |awk grep -v 反向输出,即过滤掉带有grep的输出. xargs:传递参数
- (转)JavaScript: in, hasOwnProperty, delete, for/in
in 运算符 判断对象是否拥有某一属性只要对象拥有该属性,就会返回true,否则false var point = { x:1, y:1 };alert( 'x' in point ); //tru ...
- MySql常用函数数学函数、加密函数等(转—收藏)
MySql函数众多,这里只是列举了一部分常用的函数. 一.数学函数 ABS(x) // 返回x的绝对值 BI ...
- 【Android进阶】怎样使用文件来保存程序中的数据
在程序中.有非常多保存和获取数据的方法,本篇文章,主要介绍使用文件系统对程序中的数据进行保存和读取的操作 我直接写了一个帮助类,进行文件的写入和读取操作 /** * 用于在文件里保存程序数据 * * ...
- PL/SQL 异常错误处理
异常错误处理 一个优秀的程序都应该可以正确处理各种出错情况,并尽可能从错误中恢复.ORACLE 提供异常情况(EXCEPTION)和异常处理(EXCEPTION HANDLER)来实现错误处理 ...
- android开发全然退出activity
我们退出Activity能够调用:finish(),system(0),可是这些都仅仅是单单退出单个Activity 也有人会说,直接把进程杀死,这些做法都不是非常可取.事实上我们翻看api能够发现. ...
- java学习路线-Java技术人员之路从0基础到高级
满满的 全是干货 java基础: 尚学堂 马士兵 个人推荐 历经5年锤练--史上最适合刚開始学习的人入门的Java基础视频 很具体 适合 时间多的看 传智播客java基础班 马士兵线程 ...
- Map根据value排序
网上找到的资源, package com.test.ch1; import java.util.ArrayList; import java.util.Collections; import java ...
- eclipse JavaEE版"javax.servlet.http.HttpServlet" was not found on the Java Build Path问题的解决办法
使用eclipse JavaEE 版,新建 Dynamic Web Project 项目.在项目里添加 JSP 文件,会在文件头部出现错误提示.提示语句为:The superclass "j ...
- springMVC对简单对象、Set、List、Map的数据绑定和常见问题.
算了,就不粘贴了,到原文去查看吧! springMVC对简单对象.Set.List.Map的数据绑定和常见问题.