实践技术点: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. Uni2D 入门

    原地址:http://blog.csdn.net/kakashi8841/article/details/17599505

  2. 判断一个字符串是否为合法IP

    输入任意一个字符串,判断是否为合法IP bool IsIPAddress(const char * str){ //先判断形式是否合法, //检查是否只包含点和数字 ; str[i] != '\0'; ...

  3. 《DirectX 9.0 3D游戏开发编程基础》 第一章 初始化Direct3D 读书笔记

    REF设备 参考光栅设备,他能以软件计算方式完全支持Direct3D Api.借助Ref设备,可以在代码中使用那些不为当前硬件所支持的特性,并对这此特性进行测试. D3DDEVTYPE 在程序代码中, ...

  4. 当执行sql更新失误,添加了错误的判断条件,导致数据表数据出错时,如何利用备份数据库实现联合更新还原数据。

    首先得有备份数据库,没有备份肯定无法联合更新回复. 我错误更新了 [SBSDB].[dbo].[wallet_user_info]中的用户名user_name 我的备份数据库及对应数据表SBSDBTe ...

  5. php类库PHP QR Code 二维码

    php类库PHP QR Code 二维码 php类库PHP QR Code 二维码 php类库PHP QR CodePHP QR Code is open source (LGPL) library ...

  6. 用html5(requestFullscreen) js实现点击一个按钮使浏览器全屏效果

    项目中需要将后台浏览器的窗口全屏,也就是我们点击一个按钮要实现按F11全屏的效果. 在HTML5中,W3C制定了关于全屏的API,就可以实现全屏幕的效果,也可以让页面中的图片,视频等全屏目前只有goo ...

  7. 使用Crypto++库的CBC模式实现加密

    //***************************************************************************** //@File Name : scsae ...

  8. wp8 各种启动器

    PhoneCallTask  打电话 需要 ID_CAP_PHONEDIALER Windows Phone 8, Windows Phone OS 7.1

  9. 40-语言入门-40-C小加之随机数

    题目地址: http://acm.nyist.net/JudgeOnline/problem.php?pid=255   15 20 32 40 67 89 300 400   代码: #includ ...

  10. MapReduce源码分析之JobSubmitter(一)

    JobSubmitter,顾名思义,它是MapReduce中作业提交者,而实际上JobSubmitter除了构造方法外,对外提供的唯一一个非private成员变量或方法就是submitJobInter ...