随笔-86  评论-767  文章-3  trackbacks-3

我一直很推崇MSN Space的服务,对其相册服务和皮肤一直情有独钟。国内的播客,我首选MSN Space。也可能,MSN Space没有那么多炒作。

恩,言归正传。几天来研究一下MSN Space的Ajax应用。典型的,其应用主要体现在:网络日志的评论、固定链接、引用记录、自定义列表上面。了解Ajax之前,一直对其数据的获取方式很好奇。现在,大概略知一二了。如下图所示。
space-article.jpg
space-comment.jpg
space-link.jpg
space-list.jpg
space-track.jpg
对于共享空间首页,“添加评论”、“阅读评论”、“固定链接”、“引用通告”主要用到的Javascript函数为:OpenSection(section, entryid, bNewComment, bTriedPassportRefresh, bAreNewCommentsAllowed) ,其通过第一个参数section判断各种操作类别,然后从服务器获取数据,在显示在相应的DIV浮动层中。
其使用Ajax获取数据的关键代码由Javascript函数GetBlogActivity(entryid, item, otherformfields, bTriedRefresh) 提供。其代码如下所示:
 function GetBlogActivity(entryid, item, otherformfields, bTriedRefresh)
 {
 var response = "";
 var fException = false;
 eval ('try {xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {xmlhttp = null;}');
 if (xmlhttp != null)
 {
 try{
 xmlhttp.Open("POST", BlogJSPostUrl, false);
 var strA = "handle="+ entryid;
 strA += "&blogitem=" + item;
 strA += "&" + BlogJSBlogPartParam;
 strA += otherformfields;
 xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
 xmlhttp.Send(strA);
 }catch(e){
 fException = true;
 }
 if(fException){
 if(bTriedRefresh){
 //exception after trying passport refresh, stop here to avoid infinite loop
 response = "error";
 }else{
 //build the response - an iframe that will load up and refresh passport credentials
 var timer = setTimeout(DisplayContentLoadError(item, entryid), 10000); //fail in 10s if not cleared
 var iframeString = "<iframe src=\"/PassportRefresh.aspx?id=" + entryid + "&function=get&timer=" + timer + "&item=" + item + "&formfields=" + otherformfields.replace(/&/g, "%26") + "\" />";
 var divID = "ppRefresh" + item + entryid;
 if(document.getElementById(divID)){
 response = iframeString;
 document.getElementById(divID).style.display = "none";
 }else{
 response = "<div style=\"display:none\" id=\"" + divID + "\">" + iframeString + "</div>";
 }
 }
 }else{
 if(xmlhttp.status != 200){
 response = "error";
 }else{
 response = xmlhttp.responseText;
 }
 }
 }
 return response;
 }

很容易看到,其使用了XMLHttpRequest的同步请求方式。这就是为什么每次单击“阅读评论”的时候页面都需要停顿一下。 xmlhttp.Open("POST", BlogJSPostUrl, false);中所用到的BlogJSPostUrl定义在共享空间的首页,其余上述两个函数定义在BlogJS.js文件中。

《Ajax开发详解》的“模拟MSN Space”一章将有更加详细的阐述。

posted on 2006-03-09 09:49 eamoi 阅读(5137) 评论(3)  编辑  收藏 所属分类: AJAX

评论:
# re: [汇总]我所看到的Ajax应用之MSN Space 2006-05-07 19:26 | 李文广
很高兴能成为你的读者,今天我买了你的《AJAX开发精要》,写得真好!……
很及时,谢谢你。
我想在你的博客里最好多一点引用这些技术,这样能让人们有真实的感受
^☉^
我的QQ:280380365
C#开发群:14363918
欢迎任何人加我  回复  更多评论
  
# re: [汇总]我所看到的Ajax应用之MSN Space 2006-05-07 19:34 | 李文广
  顺便说说,我也在开发一系列的书,已出版的有九个软件的快捷键卡与及一本叫《48分钟学会五笔》的书,而现在我是用AJAX来开发各种随网软件,所以我们是同行^﹀^。虽然学编程刚开始,但我已经在写一本叫《完全用中文学HTML》的书了。所以有交流的需求!……
  顺祝你的书是最好买的AJAX书。至少我认为是这样,之前买了一本AJAX基础入门,是在北京的地坛五月三日的书展买的,虽然很好,但怎么也是外国人的思想,与我们有一段距离,所以又痛下决心买了你的书,发觉真的没有买错,写得好极了,连HTML、JAVASCRIPT、DOM也有教,真不错。建议再做几个视频教程,与及相关的大型应用软件,如象OBLOG、DVBBS等的东西,我想更有说服力,来宣传你的书也有好处,祝你好动……
  www.ddh4.com 快捷键网  回复  更多评论
  
# re: [汇总]我所看到的Ajax应用之MSN Space 2006-05-19 17:11 | xcb
cool  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: