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
Oct 31 Javascript
jquery统计输入文字的个数并对其进行判断
Jan 07 Javascript
js事件绑定快捷键以ctrl+k为例
Sep 30 Javascript
JavaScript实现把数字转换成中文
Jun 29 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
Aug 30 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
Sep 20 Javascript
vue2笔记 — vue-router路由懒加载的实现
Mar 03 Javascript
JQuery实现图片轮播效果
May 08 jQuery
Java设计中的Builder模式的介绍
Mar 22 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
Dec 17 Javascript
Paypal支付不完全指北
Jun 04 Javascript
jQuery+ThinkPHP实现图片上传
Jul 23 jQuery
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
人族 TERRAN 概述
2020/03/14 星际争霸
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
php变量作用域的深入解析
2013/06/03 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
PHP抓取网页、解析HTML常用的方法总结
2015/07/01 PHP
yii2 commands模式以及配置crontab定时任务的方法
2017/08/19 PHP
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
2013/01/07 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
关于angular js_$watch监控属性和对象详解
2017/04/24 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
小程序实现单选多选功能
2018/11/04 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
JS实现的自定义map方法示例
2019/05/17 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
Python中的anydbm模版和shelve模版使用指南
2015/07/09 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
python数据分析:关键字提取方式
2020/02/24 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
关于赌博的检讨书
2014/01/08 职场文书
应用英语专业自荐信
2014/01/26 职场文书
大学班级学风建设方案
2014/05/01 职场文书
入党培养人考察意见
2015/06/08 职场文书
房屋产权证明书
2015/06/19 职场文书
Python超简单容易上手的画图工具库推荐
2021/05/10 Python