ASP.NET中AJAX 调用实例代码


Posted in Javascript onMay 03, 2012

1前言
最近在ASP.NET中做了一个AJAX调用 : Client端先从ASP.NET Server后台取到一个页面模板,然后在页面初始化时再从Server中取一些相关数据以实现页面模板的动态显示。具体实现为:
1) Client向 ASP.NET后台发送HTTP GET 请示
2) 后台给Client发送一个HTML模板,同时在内存中存储一个XML String (包含页面模板动态显示所需的数据)
3) Client在初始化页面时,发送AJAX请求,拿到XML String
4) 利用拿到的XML String,定制化HTMl模板,实现HTML页面模板的动态显示。
2几个关键点的简介与代码示例
2.1 ASP.NET Server端
2.1.1 用C#生成XML String
用System.Xmlnamespace下的几个类就可以实现。下面是Code sample,

ArrayList steps = new ArrayList(); 
String errordiscription = "Not in position"; 
for (int i = 0; i < 5; i++) 
{ 
steps.Add(new Step(@"images/1.jpg", "step21 description")); 
} 
XmlDocument doc = new XmlDocument(); 
XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null); 
doc.AppendChild(docNode); 
//add the root 
XmlNode rootNode = doc.CreateElement("Root"); 
doc.AppendChild(rootNode); 
//add the error description node 
XmlNode errorNode = doc.CreateElement("ErrorDescription"); 
errorNode.AppendChild(doc.CreateTextNode(errordiscription)); 
rootNode.AppendChild(errorNode); 
//add the steps node 
XmlNode productsNode = doc.CreateElement("Steps"); 
rootNode.AppendChild(productsNode); 
for (int i = 0; i < steps.Count; i++) 
{ 
XmlNode productNode = doc.CreateElement("step"); 
XmlAttribute productAttribute = doc.CreateAttribute("description"); 
productAttribute.Value = ((Step)steps[i]).description; 
productNode.Attributes.Append(productAttribute); 
//productNode.Value = ((Step)steps[i]).imagePath; 
productNode.AppendChild(doc.CreateTextNode(((Step)steps[i]).imagePath)); 
productsNode.AppendChild(productNode); 
} 
Global.Repairsteps= doc.InnerXml;

生成的XML如下:
<?xml version="1.0" encoding="UTF-8" ?> 
- <Root> 
<ErrorDescription>Not in position</ErrorDescription> 
- <Steps> 
<step description="step21 description">images/1.jpg</step> 
<step description="step21 description">images/1.jpg</step> 
<step description="step21 description">images/1.jpg</step> 
<step description="step21 description">images/1.jpg</step> 
<step description="step21 description">images/1.jpg</step> 
</Steps> 
</Root>

2.1.2 响应Ajax请求,返回XML 流
这里就只有一点需要注意,加个HTML Header,声明 Content-Type.
Response.Clear(); 
Response.AddHeader("Content-Type", "text/xml"); 
Response.Write(Global.Repairsteps); 
Response.End();

2.1.3 多个Request之间数据共享
实现多个Request之间数据共享的方法很简单直观,利用一个Global对象就可以了。
public class Global 
{ 
/// <summary> 
/// Global variable storing important stuff. 
/// </summary> 
static string _repairsteps; 
/// <summary> 
/// Get or set the static important data. 
/// </summary> 
public static string Repairsteps 
{ 
get 
{ 
return _repairsteps; 
} 
set 
{ 
_repairsteps = value; 
} 
} 
}

2.2 Client端
2.2.1 AJAX获取 XML
$.ajax({ 
type: "GET", 
url: "http://localhost:3153/WebSite2/", 
cache: false, 
dataType: "xml", 
error:function(xhr, status, errorThrown) { 
alert(errorThrown+'\n'+status+'\n'+xhr.statusText); 
}, 
success: function(xml) { 
//Here we can process the xml received via Ajax 
}});

2.2.2 动态插入HTML List 元素
比较常见的方法是生成html stream,然后用append或html把Stream插入到DOM里面去。这样做有一个问题,如果Stream里恰好有双引号或单引号时,就要用 很多的“\”分隔符,容易出错,可读性不太法,不太方便,事实上,JQuery有个create new element的功能。只要给$的输入参数包含<tag ... >时,JQuery就不会把它理解成一个selector expression, 而是把它理解成一个生成新的DOM element 。以下是一个code sample.
$(xml).find("step").each(function(){ 
var stepimagepath=$(this).text(); 
var stepdescription=$(this).attr("description"); 
additem(stepimagepath, stepdescription); 
}); 
function additem(stepimagepath, stepdescription){ 
$('.ad-thumbs ul').append( 
$('<li>').append( 
$('<a>').attr('href', stepimagepath).append( 
$('<img>').attr('src', stepimagepath).attr('alt', stepdescription) 
))); 
}

生成的HTML section 如下:
<ul class="ad-thumb-list"> 
<li><a href="images/1.jpg"><img src="images/1.jpg" alt="step21 description"></a></li> 
<li><a href="images/1.jpg"><img src="images/1.jpg" alt="step21 description"></a></li> 
<li><a href="images/1.jpg"><img src="images/1.jpg" alt="step21 description"></a></li> 
<li><a href="images/1.jpg"><img src="images/1.jpg" alt="step21 description"></a></li> 
<li><a href="images/1.jpg"><img src="images/1.jpg" alt="step21 description"></a></li> 
</ul>

3总结
本文介绍了在ASP.NET中使用Ajax可能会碰到的几个关键点。 C#生成XML流,AJAX实现(Server端与Client端), Global 变量,与及如果用一种比较好的方法动态插入HTML 元素.
4参考
http://www.dotnetperls.com/global-variables-aspnet
http://api.jquery.com/jQuery/
Javascript 相关文章推荐
window.onload和$(function(){})的区别介绍
Oct 30 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
Dec 11 Javascript
JavaScript 面向对象与原型
Apr 10 Javascript
javascript验证邮件地址和MX记录的方法
Jun 16 Javascript
JS实现简单的右下角弹出提示窗口完整实例
Jun 21 Javascript
bootstrap日历插件datetimepicker使用方法
Dec 14 Javascript
浅谈键盘上回车按钮的js触发事件
Feb 13 Javascript
AngularJs 常用的过滤器
May 15 Javascript
基于jquery实现五星好评
Nov 18 jQuery
在Vue组件上动态添加和删除属性方法
Feb 23 Javascript
JS 实现分页打印功能
May 16 Javascript
小程序简单两栏瀑布流效果的实现
Dec 18 Javascript
javascript中将Object转换为String函数代码 (json str)
Apr 29 #Javascript
基于jquery ajax 用户无刷新登录方法详解
Apr 28 #Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
Apr 26 #Javascript
再谈querySelector和querySelectorAll的区别与联系
Apr 20 #Javascript
js querySelector和getElementById通过id获取元素的区别
Apr 20 #Javascript
仿微博字符限制效果实现代码
Apr 20 #Javascript
javascript 另一种图片滚动切换效果思路
Apr 20 #Javascript
You might like
PHP魔术方法使用方法汇总
2016/02/14 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
Yii框架学习笔记之session与cookie简单操作示例
2019/04/30 PHP
百度留言本js 大家可以参考下
2009/10/13 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
JavaScript模仿Pinterest实现图片预加载功能
2016/10/25 Javascript
addEventListener()与removeEventListener()解析
2017/04/20 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
小程序最新获取用户昵称和头像的方法总结
2019/09/23 Javascript
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
Python的SQLAlchemy框架使用入门
2015/04/29 Python
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
Python如何获取系统iops示例代码
2016/09/06 Python
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
python 异或加密字符串的实例
2018/10/14 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
2018/12/29 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
如何清空python的变量
2020/07/05 Python
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
印度尼西亚最好的小工具在线商店:Erafone.com
2019/03/26 全球购物
康拓普公司Java笔面试
2016/09/23 面试题
西门豹教学反思
2014/02/04 职场文书
飘柔洗发水广告词
2014/03/14 职场文书
优秀语文教师事迹
2014/05/18 职场文书
体育教育毕业生自荐信
2014/06/29 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书
世界卫生日宣传活动总结
2015/02/09 职场文书
业务员辞职信范文
2015/03/02 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
详解PHP Swoole与TCP三次握手
2021/05/27 PHP