Comet框架Plushlet使用問題解決方案
阿新 • • 發佈:2020-10-19
對於某些人來說,這可能是個愚蠢的問題,但是由於這個問題讓我糾結了大半天,我實在是受不了了,我一定要把它貼出來!
補充一下,之前我說的修改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時還造成了變數衝突!
壞習慣害死人呀!
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。