2010-05-26 73 views
7

我有下面的代碼,似乎並沒有在所有的工作:(我不斷收到:jQuery的「Microsoft JScript運行時錯誤:對象預期」

Microsoft JScript runtime error: Object expected 

的錯誤似乎當超時完成發生。所以,如果我提出的超時10秒的誤差爲10秒鐘持有

我希望能夠以更新的朋友在網上異步數量數量顯示與下面的HTML:。

<a href="" id="showChat" >Friends online <strong id="friendsOnline">(?)</strong></a> 

朋友部分在第一次運行時設置,但當超時回叫時它不會再次啓動。另外,我看不到在哪一行發生錯誤,因爲如果我想打破錯誤,它只顯示「無源代碼」等。

下面的代碼是我正在使用的代碼。謝謝!

<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.js" type="text/javascript"></script> 
<script src='/Scripts/MicrosoftAjax.js' type="text/javascript"></script> 
<script src='/Scripts/MicrosoftMvcAjax.js' type="text/javascript"></script> 
<script src='/Scripts/jquery.autocomplete.js' type="text/javascript"></script> 

<script type="text/javascript"> 
$(document).ready(function() { 
    UpdateFriendsOnline(); 
    function UpdateFriendsOnline() { 
     window.setTimeout("UpdateFriendsOnline()", 1000); 
     $.get("/Account/GetFriendsOnline", function(data) { 
      $("#friendsOnline").html("(" + data + ")"); 

     }); 
    } 
}); 
</script> 

回答

3

更改setTimeout()這樣的:

window.setTimeout(UpdateFriendsOnline, 1000); 

當前您的功能離子在document.ready之外不可用,所以它不能作爲全局函數訪問,它以字符串的形式傳遞它正在嘗試訪問它。一般來說,從來沒有通過setTimeout()一個字符串,如果你可以避免它...它可能會導致像這種情況下的問題,我想不出一個例子(如果可以避免)通過它作爲一個更好串。

另外,我建議燒成當你迴響應,否則你就會開始排隊重疊的Ajax請求,你能做到這一點,通過調整你的函數是:

function UpdateFriendsOnline() { 
    $.get("/Account/GetFriendsOnline", function(data) { 
    $("#friendsOnline").html("(" + data + ")"); 
    window.setTimeout(UpdateFriendsOnline, 1000); 
    }); 
} 
+0

@Nick謝謝。我現在修改了我的代碼以匹配那個。你有什麼想法爲什麼我的請求只被調用一次?似乎並沒有更新每一秒:(如果我在我的控制器中設置了一個斷點,我只打了一次 – 2010-05-26 20:04:56

+0

@Oskar - 你是說它沒有在超時之後被調用,或者只有一次嗎?還有,是否有任何javascript錯誤? – 2010-05-26 20:06:12

+0

@Nick現在它似乎只是打破了一次,所以不是在超時之後,似乎至少在超時之前有一次,但現在已經不是了,不,我沒有從調試器中得到任何js錯誤。編輯:注意,它的工作原理就像在Firefox中預期的那樣,但不是IE8 – 2010-05-26 20:11:27

3

試試這個:

window.setTimeout(UpdateFriendsOnline, 1000); 

如果函數是在全局命名空間中定義了你的版本會工作。

這樣,你傳遞一個本地引用的函數,它會每秒調用一次。


編輯:

如果你需要新的一個開始前取消了以前的要求,你可以做這樣的事情:

<script type="text/javascript"> 
$(document).ready(function() { 
    var request; // Stores XMLHTTPRequest object 
    UpdateFriendsOnline(); 
    function UpdateFriendsOnline() { 
     if(request) request.abort(); // Abort current request if there is one 

     window.setTimeout(UpdateFriendsOnline, 1000); 

      // Store new XMLHTTPRequest object 
     request = $.get("/Account/GetFriendsOnline", function(data) { 
      request = null; // Clear request object upon success 
      $("#friendsOnline").html("(" + data + ")"); 
     }); 
    } 
}); 
</script> 
+0

謝謝兩位,即似乎工作! :)讓我覺得自己很笨:( – 2010-05-26 19:56:41

+0

@Oskar Kjellin - Nah。我敢肯定,這裏或所有人都會陷入困境!:o) – user113716 2010-05-26 19:59:16

+0

是的,不知道當作爲一個字符串傳遞時,它不得不被定義爲全球:O – 2010-05-26 20:05:28

相關問題