用 Microsoft Ajax Library 异步获取页面并显示

这个是看了MicrosoftAjax.js的代码,从代码中推出来的。希望对大家学习ms ajax lib有帮助。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    
<title></title>
    
<!--将这个改成你的Ms Ajax Lib 的地址-->
    
<script src="MicrosoftAjax.js" type="text/javascript"></script>
</head>
<body>
    
<script type="text/javascript">
    
function click(_url){
    $get(
"as").innerHTML="正在载入 ";//正在载入时的信息
    var xhe = new Sys.Net.XMLHttpExecutor();
    
var wr = new Sys.Net.WebRequest();
    wr.set_url(_url);
//设置异步访问URL 
    wr.set_httpVerb("get");//访问方式
    wr.set_executor(xhe);//将XMLHttpExecutor与WebRequest关联
    wr.set_userContext("my Context");//设备上下文,不知是做什么用的
    wr.add_completed(function(){//完成载入时的函数
    $get("as").innerHTML=xhe.get_responseData();
    });
    xhe.executeRequest();
//执行
    }
    
</script>
    
<!--更改Click 的参数即可访问本地-->
<href="javascript:click('http://www.csdn.net')">csdn</a>
<href="javascript:click('http://www.cnblogs.com')">cnblogs</a>
<href="javascript:click('http://www.mvking.com/bbs')">MvKing</a>
<div id="as">init</div>
</body>
</html>
示例2:取个RSS并显示(在取的时候处理为HTML)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    
<title></title>
    
<!--将这个改成你的Ms Ajax Lib 的地址-->
    
<script src="MicrosoftAjax.js" type="text/javascript"></script>
</head>
<body>
    
<script type="text/javascript">
function click(_url){
    $get(
"as").innerHTML="正在载入 ";//正在载入时的信息
    var xhe = new Sys.Net.XMLHttpExecutor();
    
var wr = new Sys.Net.WebRequest();
    wr.set_url(_url);
//设置异步访问URL 
    wr.set_httpVerb("get");//访问方式
    wr.set_executor(xhe);//将XMLHttpExecutor与WebRequest关联
    wr.set_userContext("my Context");//设备上下文,不知是做什么用的
    wr.add_completed(function(){//完成载入时的函数
    var b=new String(xhe.get_responseData());
    b
=b.replace(/<\?xml \w+>/g,"");//用正则替换一番
    b=b.replace(/<rss\w+>/g,"<div>");
    
/**/b=b.replace(/rss>/g,"div>");
    b
=b.replace(/channel>/g,"ul>");
    b
=b.replace(/item>/g,"li>");
    b
=b.replace(/description>/g,"div>");
    b
=b.replace(/<description><!\[CDATA\[/g,"<div>");
    b
=b.replace(/title>/g,"h3>");
    b
=b.replace(/\]\]>/g,"");
    b
=b.replace(/<link>/g,"<a href=");
    b
=b.replace(/<\/link><dc:creator>/,">");
    b
=b.replace(/<\/dc:creator>/g,"</a>");
    b
=b.replace(/<author>\w+<\/author>/g,"");
    
//alert(b);
    $get("as").innerHTML=b;
    });
    xhe.executeRequest();
//执行
}
</script>
<!--更改Click 的参数即可访问本地-->
<href="javascript:click('http://www.cnblogs.com/chsword/category/86648.html/rss')">Get My Blog Rss</a>
<div id="as">init</div>
</body>
</html>

posted @ 2007-07-11 09:06 重典 阅读(1691) 评论(15)  编辑 收藏 所属分类: Web前端UI开发

  回复  引用  查看    
#1楼 2007-07-11 09:23 | Ariel Y.      
仅凭MicrosoftAjax.js可以跨域读取别的页面的内容?
  回复  引用  查看    
#2楼 [楼主]2007-07-11 09:26 | 邹健      
原来也觉得不可以,不过试了一下,居然可以
  回复  引用  查看    
#3楼 2007-07-11 10:13 | Anders Liu      
嗯,好使。
不知作者是否有兴趣介绍下如何不用ScriptManager、Toolkit等服务器控件,而直接利用ASP.NET Ajax的功能。就比如这篇这样。
  回复  引用  查看    
#4楼 [楼主]2007-07-11 10:28 | 邹健      
@Anders Liu
争取吧,我试写一些
  回复  引用  查看    
#5楼 2007-07-11 11:15 | Ariel Y.      
@邹健

能深入分析下为什么可以吗?
  回复  引用  查看    
#6楼 [楼主]2007-07-11 11:30 | 邹健      
@Ariel Y.
指的是分析一下msajax.js的代码吗?

  回复  引用  查看    
#7楼 2007-07-11 12:37 | Clingingboy      
很简单的方法,设置不同ScriptManager的属性,然后看呈现的代码,js不会变.前天调用的代码在变.ScriptManager就是帮助我们生成代码用的.Toolkit更是帮助我们生成代码用的.Toolkit生成的代码比较少.大部分还得靠dll里扩展的js
  回复  引用  查看    
#8楼 2007-07-11 14:29 | Ariel Y.      
@邹健
分析一下为什么仅仅一个客户端MicrosoftAjax.js就可以实现跨域访问,其中是怎么实现的。

通常都需要服务器端的Proxy的。
  回复  引用  查看    
#9楼 [楼主]2007-07-11 15:16 | 邹健      
@Ariel Y.
大多的示例都是用webrequest直接做的
没有用到XMLHttpExecutor
但XMLHttpExecutor并没有设置代理,这里我也不太清楚是怎么回事

执行时调用
var body = this._webRequest.get_body();
var headers = this._webRequest.get_headers();
this._xmlHttpRequest = new XMLHttpRequest();
this._xmlHttpRequest.onreadystatechange = this._onReadyStateChange;
var verb = this._webRequest.get_httpVerb();
this._xmlHttpRequest.open(verb, this._webRequest.getResolvedUrl(), true );
if (headers) {
for (var header in headers) {
var val = headers[header];
if (typeof(val) !== "function")
this._xmlHttpRequest.setRequestHeader(header, val);
}
}

if (verb.toLowerCase() === "post") {
if ((headers === null) || !headers['Content-Type']) {
this._xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}

if (!body) {
body = "";
}
}

var timeout = this._webRequest.get_timeout();
if (timeout > 0) {
this._timer = window.setTimeout(Function.createDelegate(this, this._onTimeout), timeout);
}
this._xmlHttpRequest.send(body);


  回复  引用  查看    
#10楼 [楼主]2007-07-11 15:18 | 邹健      
@Clingingboy
那样是可以完成不用服务器端来完成msajax的调用 ,但有些功能并不是updatepanel和ajaxtoolkit提供了的,所以还要自己来写
  回复  引用  查看    
#11楼 2007-07-12 20:33 | 么么茶.NET      
SQL斑竹要顶下...
  回复  引用  查看    
#12楼 [楼主]2007-07-12 20:40 | 邹健      
@么么茶.NET
不是同一只...吼吼,重名而已
  回复  引用  查看    
#13楼 2008-01-01 18:52 | 蓝色太平洋      
谢谢, 应该改为:b=b.replace(/link>/g,"
  回复  引用    
#14楼 2008-06-19 16:52 | mjrgjing [未注册用户]
这样的跨域肯定不行,会跳安全提示,而且只有ie可以ff不行

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-07-11 11:32 编辑过


相关链接: