DedeCMS digg Ajax 跨域的实现分析

所属分类: CMS教程 / dedecms 阅读数: 535
收藏 0 赞 0 分享
提供解决方案如下:
@writen by etongchina 2009-02-06 19:00
实现方案:类似json实现
实现原理:js允许引入的远程文件(js)来操作本地数据
具体方法:(以http://news.xxx.com/200812/25-4653.html 为例)
1.修改http://news.xxx.com/200812/25-4653.html 的js调用用部分;
在本地html或js文件中写入:
<SCRIPT LANGUAGE="JavaScript">
function _Digg(type,tid){
var s = document.createElement("SCRIPT");
s.id="cgi_emotion_list";
document.getElementsByTagName("HEAD")[0].appendChild(s);
s.src="http://www.xxx.com/../dig.php?type="+type+"&tid="+tid ;
//需要统计的php页面的 src
}
function visitCountCallBack(data){
document.getElementsByTagName("HEAD")[0].removeChild(document.getElementById("cgi_emotion_list"));
for(var i in data){
var e =document.getElementById(i);
if(e) e.innerHTML=data[i];
//一些代码去修改本地html
}
}
</script>
修改以下代码:<a href="javascript:Digg('digg',4653);">顶一下</a>
为:<a href="javascript:_Digg('digg',4653);">顶一下</a>
2. 访问远程文件:
远程文件(http://www.xxx.com/../dig.php?type=digg&tid=456 )返回类似代码:
visitCountCallBack({
"visitcount":135
});
以上代码相当于远程文件调用本地函数:visitCountCallBack
这样一来就可以实现利用远程返回数据来动态修改本地文件。
3.总结:
关于此方案,目前可行,也有人认为会过时。我认为不会产生JS越权的问题。

我这里有一个类似AJAX应用,关键技术是在<script>标签的src属性的应用。
请大家看以下HTML代码
<HTML>
<HEAD>
<title>异步json例子</title>
<SCRIPT LANGUAGE="JavaScript">
function test(){
var s = document.createElement("SCRIPT");
s.id="cgi_emotion_list";
document.getElementsByTagName("HEAD")[0].appendChild(s);
s.src="http://g2.qzone.qq.com/fcg-bin/cgi_emotion_list.fcg?uin=123456";
// test=function(){};
}
function visitCountCallBack(data){
document.getElementsByTagName("HEAD")[0].removeChild(document.getElementById("cgi_emotion_list"));
for(var i in data){
var e =document.getElementById(i);
if(e) e.innerHTML=data[i];
}
}
</SCRIPT>
</HEAD>
<BODY>
<button onclick="test()">test</button><BR>
历史访问人数:<span id="visitcount" style="color:#6600CC">点击test按钮获取数据</span><BR>
今天访问人数:<span id="dayvisit" style="color:#CC6633">点击test按钮获取数据</span><BR>
阳光指数:<span id="sun" style="color:red">点击test按钮获取数据</span><BR>
爱心指数:<span id="love" style="color:violet">点击test按钮获取数据</span><BR>
雨露指数:<span id="rain" style="color:blue">点击test按钮获取数据</span><BR>
营养指数:<span id="nutri" style="color:green">点击test按钮获取数据</span><BR>
花匠级别:<span id="gardener" style="color:#996633">点击test按钮获取数据</span>
</BODY>
</HTML>
大家可以把上面的代码拷贝到本地用IE或FIREFOX打开.点击按钮。发现不刷新页面,实现了动态的效果,而且返回的数据是跨域得到了,大家知道JAVASCRIPT是不能跨域访问的,很奇妙吧。。。。仔细研究代码发现了其中的奇妙之处
这段代码: var s = document.createElement("SCRIPT");
s.id="cgi_emotion_list";
document.getElementsByTagName("HEAD")[0].appendChild(s);
s.src="http://g2.qzone.qq.com/fcg-bin/cgi_emotion_list.fcg?uin=123456";
浏览器通过DOM解析得到了SCRIPT元素,然后添加了ID和SRC属性。我这里是W3C规范中对SCRIPT元素SRC属性的官方解释:The script element allows authors to include dynamic script in their documents. When the src attribute is set, the script element refers to an external file. The value of the attribute must be a URI (or IRI). If the src attribute is not set, then the script is given by the contents of the element. 解释为:如果定义了SCRIPT标签的SRC属性,SCRIPT标签涉及到一个外部文件,属性值必须是一个URL。也就是说SCRIPT将从此URL引用文件的内容。大家在浏览器中访问此连接:http://g2.qzone.qq.com/fcg-bin/cgi_emotion_list.fcg?uin=123456这个类似JAVA的SERVLET的URL返回以下数据:visitCountCallBack({"visitcount":65188579, "dayvisit":8658, "spacemark":0, "markchange":0, "sun":1680, "love":478, "rain":1680, "nutri":1450, "level":5, "gardener":1});这个字符串是一个JAVASCRIPT函数,输入是一个JSON字符串。这个数据返回的同时调用了上面的另一个JAVASCRIPT函数:function visitCountCallBack(data){
document.getElementsByTagName("HEAD")[0].removeChild(document.getElementById("cgi_emotion_list"));
for(var i in data){
var e =document.getElementById(i);
if(e) e.innerHTML=data[i];
}
}
函数中用innerHTML吧返回的JSON数据填充到BODY中,实现了不刷新页面得到数据的异步的效果。 还有一个关键的问题:http://g2.qzone.qq.com/fcg-bin/cgi_emotion_list.fcg?uin=123456是QQ空间的一个URL(uin是QQ号码,大家可以输入自己的QQ号码试试),JAVASCRIPT调用了其他域的数据。 这样的方式得到数据比较简单,也能跨域访问数据,比较适合一些简单的,小的无刷新的效果。 本人有些担心的是,如果哪天浏览器一更新,拒绝这种访问方式,可能这样得到数据就变得不可用了,建议大家谨慎使用这种方法!!!
更多精彩内容其他人还在看

织梦DedeCms取消后台登陆验证码的方法示例

经常建站和做优化的站长朋友们都很清楚网站的优化和客户体验度是永远需要排在第一位的,这篇文章主要介绍了织梦DedeCms取消后台登陆验证码的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

织梦栏目有缓存导致刚发布的文章条数和分页不同步处理方法

这篇文章主要介绍了织梦栏目有缓存导致刚发布的文章条数和分页不同步处理方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

加快织梦dedeCMS内容生成速度方法

最近有位站长朋友咨询一个十几万数据的DedeCMS系统,发现用Dedecms生成速度,慢的跟蜗牛一样,CPU达到100%,有时候半天都不动。这让大数据的网站的站长非常头疼,下面为大家解决这个问题
收藏 0 赞 0 分享

织梦dedecms的arclist循环中判断第一个li,则添加固定的css否则不加

这篇文章主要介绍了织梦dedecms的arclist循环中,判断如果是第一个li,则添加固定的css,否则不加,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

dedecms织梦模板里显示当前登录会员名

有时我们只是需要在网站某个地方显示一下当前登录的会员名字,这篇文章主要介绍了dedecms织梦模板里显示当前登录会员名,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

dedecms织梦模板中plus文件作用介绍及安全设置详解

很多新手用户在使用织梦CMS程序过程中,难免会碰到挂马中毒现象,所以事先我们要对网站及服务器安全做好预防备份处理,这篇文章主要介绍了dedecms织梦模板中plus文件作用介绍及安全设置详解,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解织梦DedeCms的安全问题优化解决办法(安全设置)

这篇文章主要介绍了详解织梦DedeCms的安全问题优化解决办法(安全设置)的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解dedecms后台编辑器将回车<br>改为<p>的方法

DEDECMS编辑器默认回车[确认键]是返回<br />这样的。有时候我们需要返回<p> </p>这样的,今天我们就讲讲后台编辑器将回车将<br>改为<p>的有效教程吧,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

解决dedecms多域名和站点的绑定的问题

dedecms可以实现多级域名,不同域名的绑定.这篇文章主要介绍了解决dedecms多域名和站点的绑定的问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

DedeCMS调用相关文章likearticle附加自定义字段

DedeCMS非常灵活,可以根据关键词、文章标题调用文章,以提高内容之间的相关度,提高页面权重。这篇文章主要介绍了DedeCMS调用相关文章likearticle附加自定义字段,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多