[汇总]我所看到的Ajax应用之MSN Space

[汇总]我所看到的Ajax应用之MSN Space

我一直很推崇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”一章将有更加详细的阐述。

你可能感兴趣的:([汇总]我所看到的Ajax应用之MSN Space)