簡體   English   中英

jQuery“Microsoft JScript運行時錯誤:對象預期”

[英]jQuery “Microsoft JScript runtime error: Object expected”

我有下面的代碼似乎根本不起作用:(我一直得到:

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>

嘗試這個:

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>

像這樣更改你的setTimeout()

window.setTimeout(UpdateFriendsOnline, 1000);

目前你的函數在document.ready之外是不可用的,所以它不能作為全局函數訪問,它將它作為字符串傳遞嘗試訪問它。 作為一般規則,從來沒有setTimeout()一個字符串,如果你能避免它...它可能會導致這樣的情況下的問題,我想不出一個例子由它作為一個(如果可以避免的)制成更好串。

此外,我建議你在收到回復時觸發它,否則你將開始排隊重疊ajax請求,你可以通過調整你的函數來做到這一點:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM