1. 程式人生 > 程式設計 >Comet框架Plushlet使用問題解決方案

Comet框架Plushlet使用問題解決方案

對於某些人來說,這可能是個愚蠢的問題,但是由於這個問題讓我糾結了大半天,我實在是受不了了,我一定要把它貼出來!

補充一下,之前我說的修改JS來保證路徑正確性的問題,至今沒有人給予其他可能性的答覆,而今天我到家以後在IE8上,僅僅增加了

<base href="<%=basePath%>" rel="external nofollow" >

標籤後就不再出現問題了,想想可能是因為少了一個定位專案絕對路徑的標籤,我看了一下頁面原始碼:、

<html>
	<head>
		<base href="http://localhost:8080/mypushlet/" rel="external nofollow" >
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<script type="text/javascript" src="ajax-pushlet-client.js"></script>		
		<script type="text/javascript">
			PL._init(); 
			PL.joinListen('/cuige/he');
			function onData(event) {
				document.getElementById("mess").innerHTML=event.get("mess");
				for(i=0;i<2;i++){alert(i);}
				// 離開
				// PL.leave();
			}
		</script>
	</head>
	<body>
		<center>
		<h1>
			my first pushlet!
		</h1>
		<br />
		<div id="mess"></div>
		</center>
	</body>
</html>

我絕對是這個可能!

不過我要說的不是這個問題,而是上面程式碼中的for迴圈,大家猜猜他的執行結果會是什麼!

理論上來說,應該是每次推過來訊息的時候就會進行提示,但是我發現訊息只是推送了一次!為什麼在方法裡面寫個迴圈就不行了呢,我一直糾結,同事說是不是其他程式碼中有 return 關鍵字把程式返回終止了,我嘗試把其JS都刪除,但是仍然不能解決問題。

後來突然想到是不是變數衝突!

我以為,JS方法內的變數都是侷限在這個方法內,出去這個方法就會消失,但是我錯了,就是這種認為是我的程式讓我糾結了這麼長時間!

原因很簡單

for(i=0;i<2;i++){alert(i);}

我定的 i 變數,沒有增加 var 標識,就會成為方法內的全域性變數,如果其他程式碼也有 i 這個變數,就會造成變數衝突!

我嘗試這樣去寫:

for(var i=0;i<2;i++){alert(i);}

這樣就可以一直進行提示了!

由於JavaScript屬於弱語言,我平時書寫時也不是那麼規範,也就造成了在這次引用別人API時還造成了變數衝突!

壞習慣害死人呀!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。