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 相关文章推荐
JavaScript confirm选择判断
Oct 18 Javascript
浅谈关于JavaScript的语言特性分析
Apr 11 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
Apr 29 Javascript
AngularJS通过$location获取及改变当前页面的URL
Sep 23 Javascript
jQuery获取this当前对象子元素对象的方法
Nov 29 Javascript
bootstrap laydate日期组件使用详解
Jan 04 Javascript
Vue中添加过渡效果的方法
Mar 16 Javascript
JavaScript中splice与slice的区别
May 09 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
Oct 25 Javascript
AngularJS实时获取并显示密码的方法
Feb 06 Javascript
Vue.set()实现数据动态响应的方法
Feb 07 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
Mar 17 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(3)
2006/10/09 PHP
PHP大转盘中奖概率算法实例
2014/10/21 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
理解JavaScript中的事件
2006/09/23 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
JS中Map和ForEach的区别
2018/02/05 Javascript
基于Node.js实现压缩和解压缩的方法
2018/02/13 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
vue中nextTick用法实例
2019/09/11 Javascript
python 布尔操作实现代码
2013/03/23 Python
Python文件操作,open读写文件,追加文本内容实例
2016/12/14 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
工程造价与管理专业应届生求职信
2013/11/23 职场文书
业务部经理岗位职责
2014/01/04 职场文书
毕业生见习报告总结
2014/11/08 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
大学生个人简历自我评价
2015/03/11 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
三八节活动简报
2015/07/20 职场文书
2015国庆节感想
2015/08/04 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
Java8中Stream的一些神操作
2021/11/02 Java/Android
全新239军机修复记
2022/04/05 无线电