[js hard core] 解決js 當中時序問題的一小部分(變數未定義)
js 是很動態的語言, include 和 Ajax 兩個因素導致他的執行緒有分岔的情形
不像其它需要compile 的語言, 執行程序是相當"由上到下一直線"的
也因此常常遇到那種下面的code 已經執行到了
上面相關的code 卻還沒有處理到的情況
最常見的問題就是會導致變數處在沒有定義的狀態
導致error, 今天就遇到這類的問題
我的處理方式如下:
function checkTagtoo(){
var tagtoo_jQuery = tagtoo_jQuery || [];
if (tagtoo_jQuery != []){
tagtoo_jQuery(document).ready(function(){
checkLoginStatus();
checkHighlightIcon();
tagtoo_jQuery(".not_yet_complete").live('click', function(e){
alert("網頁建置中, 請稍候!");
e.preventDefault();
e.stopPropagation();
});
});
tagtoo_jQuery("#login_btn").live('click', function(e){
e.preventDefault();
FacebookConnectWithTagtoo("StaticPageLoginCallback");
});
// logout part
tagtoo_jQuery("#logout_btn").live('click', function(e){
e.preventDefault();
doFacebookLogout();
});
}
else{
window.setTimeout("checkTagtoo();",200);
}
}
注意到了嗎? 問題的癥結點是在tagtoo_jQuery 這個變數, 我把他包在checkTagtoo 函式裡了, 預先定義一個預設值給他, 如果測試其值為預設值, 就知道此變數還沒load 進來, 隔一小段時間後再行測試(本例為200毫秒, 可自行決定重試的時間長短), 直到tagtoo_jQuery 有定義為止! 我在猜很多時序性套件底層的實作方式可能也是這樣的!
不像其它需要compile 的語言, 執行程序是相當"由上到下一直線"的
也因此常常遇到那種下面的code 已經執行到了
上面相關的code 卻還沒有處理到的情況
最常見的問題就是會導致變數處在沒有定義的狀態
導致error, 今天就遇到這類的問題
我的處理方式如下:
function checkTagtoo(){
var tagtoo_jQuery = tagtoo_jQuery || [];
if (tagtoo_jQuery != []){
tagtoo_jQuery(document).ready(function(){
checkLoginStatus();
checkHighlightIcon();
tagtoo_jQuery(".not_yet_complete").live('click', function(e){
alert("網頁建置中, 請稍候!");
e.preventDefault();
e.stopPropagation();
});
});
tagtoo_jQuery("#login_btn").live('click', function(e){
e.preventDefault();
FacebookConnectWithTagtoo("StaticPageLoginCallback");
});
// logout part
tagtoo_jQuery("#logout_btn").live('click', function(e){
e.preventDefault();
doFacebookLogout();
});
}
else{
window.setTimeout("checkTagtoo();",200);
}
}
注意到了嗎? 問題的癥結點是在tagtoo_jQuery 這個變數, 我把他包在checkTagtoo 函式裡了, 預先定義一個預設值給他, 如果測試其值為預設值, 就知道此變數還沒load 進來, 隔一小段時間後再行測試(本例為200毫秒, 可自行決定重試的時間長短), 直到tagtoo_jQuery 有定義為止! 我在猜很多時序性套件底層的實作方式可能也是這樣的!
留言
張貼留言