DedeCMSdiggAjax跨域如何實現(xiàn)

這篇文章給大家分享的是有關(guān)DedeCMS digg Ajax 跨域如何實現(xiàn)的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

成都創(chuàng)新互聯(lián)是一家專業(yè)提供公主嶺企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計、網(wǎng)站制作、H5網(wǎng)站設(shè)計、小程序制作等業(yè)務(wù)。10年已為公主嶺眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進(jìn)行中。

DedeCMS digg Ajax 跨域怎么實現(xiàn)?

因為web項目用到二級域名的原因,使得原先的digg不能正常使用。仔細(xì)分析后,發(fā)現(xiàn)是Ajax JS提交不能跨域的問題。

提供解決方案如下:

@writen by etongchina 2009-02-06 19:00

實現(xiàn)方案:類似json實現(xiàn)

實現(xiàn)原理:js允許引入的遠(yuǎn)程文件(js)來操作本地數(shù)據(jù)

具體方法:(以http://news.xxx.com/200812/25-4653.html 為例)

1.修改http://news.xxx.com/200812/25-4653.html 的js調(diào)用用部分;

在本地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 ; 
//需要統(tǒng)計的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. 訪問遠(yuǎn)程文件:

遠(yuǎn)程文件(http://www.xxx.com/../dig.php?type=digg&tid=456 )返回類似代碼:

visitCountCallBack({ 
"visitcount":135 
});

以上代碼相當(dāng)于遠(yuǎn)程文件調(diào)用本地函數(shù):visitCountCallBack

這樣一來就可以實現(xiàn)利用遠(yuǎn)程返回數(shù)據(jù)來動態(tài)修改本地文件。

3.總結(jié):

關(guān)于此方案,目前可行,也有人認(rèn)為會過時。我認(rèn)為不會產(chǎn)生JS越權(quán)的問題。

我這里有一個類似AJAX應(yīng)用,關(guān)鍵技術(shù)是在<script>標(biāo)簽的src屬性的應(yīng)用。

請大家看以下HTML代碼

<HTML> 
<HEAD> 
<title>異步j(luò)son例子</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> 
歷史訪問人數(shù):<span id="visitcount" style="color:#6600CC">點擊test按鈕獲取數(shù)據(jù)</span><BR> 
今天訪問人數(shù):<span id="dayvisit" style="color:#CC6633">點擊test按鈕獲取數(shù)據(jù)</span><BR> 
陽光指數(shù):<span id="sun" style="color:red">點擊test按鈕獲取數(shù)據(jù)</span><BR> 
愛心指數(shù):<span id="love" style="color:violet">點擊test按鈕獲取數(shù)據(jù)</span><BR> 
雨露指數(shù):<span id="rain" style="color:blue">點擊test按鈕獲取數(shù)據(jù)</span><BR> 
營養(yǎng)指數(shù):<span id="nutri" style="color:green">點擊test按鈕獲取數(shù)據(jù)</span><BR> 
花匠級別:<span id="gardener" style="color:#996633">點擊test按鈕獲取數(shù)據(jù)</span> 
</BODY> 
</HTML>

大家可以把上面的代碼拷貝到本地用IE或FIREFOX打開.點擊按鈕。發(fā)現(xiàn)不刷新頁面,實現(xiàn)了動態(tài)的效果,而且返回的數(shù)據(jù)是跨域得到了,大家知道JAVASCRIPT是不能跨域訪問的,很奇妙吧。。。。仔細(xì)研究代碼發(fā)現(xiàn)了其中的奇妙之處

這段代碼:

 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規(guī)范中對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標(biāo)簽的SRC屬性,SCRIPT標(biāo)簽涉及到一個外部文件,屬性值必須是一個URL。也就是說SCRIPT將從此URL引用文件的內(nèi)容。大家在瀏覽器中訪問此連接:http://g2.qzone.qq.com/fcg-bin/cgi_emotion_list.fcg?uin=123456這個類似JAVA的SERVLET的URL返回以下數(shù)據(jù):visitCountCallBack({"visitcount":65188579, "dayvisit":8658, "spacemark":0, "markchange":0, "sun":1680, "love":478, "rain":1680, "nutri":1450, "level":5, "gardener":1});這個字符串是一個JAVASCRIPT函數(shù),輸入是一個JSON字符串。這個數(shù)據(jù)返回的同時調(diào)用了上面的另一個JAVASCRIPT函數(shù):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]; 
} 
}

函數(shù)中用innerHTML吧返回的JSON數(shù)據(jù)填充到BODY中,實現(xiàn)了不刷新頁面得到數(shù)據(jù)的異步的效果。 還有一個關(guān)鍵的問題:http://g2.qzone.qq.com/fcg-bin/cgi_emotion_list.fcg?uin=123456是QQ空間的一個URL(uin是QQ號碼,大家可以輸入自己的QQ號碼試試),JAVASCRIPT調(diào)用了其他域的數(shù)據(jù)。 這樣的方式得到數(shù)據(jù)比較簡單,也能跨域訪問數(shù)據(jù),比較適合一些簡單的,小的無刷新的效果。 本人有些擔(dān)心的是,如果哪天瀏覽器一更新,拒絕這種訪問方式,可能這樣得到數(shù)據(jù)就變得不可用了,建議大家謹(jǐn)慎使用這種方法?。?!

感謝各位的閱讀!關(guān)于DedeCMS digg Ajax 跨域如何實現(xiàn)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

網(wǎng)頁標(biāo)題:DedeCMSdiggAjax跨域如何實現(xiàn)
網(wǎng)站網(wǎng)址:http://bm7419.com/article28/jdddjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計公司手機(jī)網(wǎng)站建設(shè)、域名注冊、ChatGPT全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)