2011-01-07 124 views
7

在我的網站上,我有一個jquery函數,它在頁面加載後立即從另一個(安全)服務器檢索數據。使用JSONP調用我目前文檔準備事件後加載此數據:測試jquery是否被加載沒有使用文檔就緒事件

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.getJSON(_secureHost + '/base/members/current.aspx?callback=?', function (data) { 
      initPage(data); 
     }); 
    }); 
</script> 

我不喜歡上面所說的,就是JSONP實際上可以在文檔準備事件之前exectued,從而減緩頁面加載。所以,如果我包括在頁面內的jQuery(使用腳本標籤即不引用),然後將下面的代碼的偉大工程,加快網頁載入速度:

<script type="text/javascript"> 
    $.getJSON(_secureHost + '/base/members/current.aspx?callback=?', function (data) { 
     $(document).ready(function() { 
      initPage(data); 
     }); 
    }); 
</script> 

但是包括在每一個頁面jQuery是一個23K的開銷,我」 d喜歡避免。我如何測試jquery是否已經加載,並且只有在加載jquery時才執行initPage()函數?

編輯: 更確切地說,我需要重複檢查,如果jquery被加載,然後執行事件。計時器的工作可能是解決方案..

解決方案: 我已經創建了一個jQuery的檢查前置碼。我的頁面加載速度不能更快:)。感謝大家!

function preInit() 
    { 
     // wait until jquery is loeaded 
     if (!(typeof jQuery === 'function')) { 
      window.setTimeout(function() { 
       //console.log(count++); 
       preInit(); 
      }, 10); // Try again every 10 ms.. 
      return; 
     } 
      $.getJSON(_secureHost + '/base/members/current.aspx?callback=?', 
      function (data) { 
       $(document).ready(function() { 
        initPage(data); 
       }); 
      }); 
     } 

回答

5

我想你可以只使用

if (jQuery) { 
    ... 
} 

,看看jQuery對象存在。

好,更好的方式是:

if (typeof jQuery !== 'undefined') { 
    ... 
} 

if (typeof jQuery === 'function') { 
    ... 
} 

編輯:

不要擔心開銷還是jQuery對象被加載。如果你只是使用普通的<script src="...">標籤包括jQuery庫,然後執行你的代碼沒有$(document).ready,就像這樣:

<script type="text/javascript"> 
    $.getJSON(_secureHost + '/base/members/current.aspx?callback=?', function (data) { 
     initPage(data); 
    }); 
</script> 

它將工作。 $(document).ready部分只是爲了確保DOM在您嘗試更改尚未加載的DOM元素之前完全加載。包括Ajax功能在內的jQuery庫本身將會馬上出現。現在

,如果您的通話initPage(data)使用DOM,我認爲是這樣,你可以檢查在,像這樣:

<script type="text/javascript"> 
    function initPage(data) { 
     var $domObject = $('#your-dom-object'); 
     if ($domObject.length === 0) { // Dom object not loaded yet. 
      window.setTimeout(function() { 
       initPage(data); 
      }, 0); // Try again after other stuff has finished. 
      return; 
     } 
     // Do your regular stuff here. 
    } 
</script> 

不過,我不認爲這將是在大多數情況下是必要

+0

這就是近了。但我不知道實際加載jquery需要多長時間。我不得不重複這個檢查,直到jquery被加載。我可以創建一個每10ms左右檢查一次的時間..但是這並不好。 – AyKarsi 2011-01-07 09:22:48

+1

啊,那是什麼意思?我以爲你的意思是你想測試jQuery是否被加載。在那種情況下,我非常肯定,當你退出`

1

只要您將包含jQuery的腳本標記放置在運行您的函數的腳本標記上方,它就可以正常工作。

結束語腳本在此,而不是現成的功能可以幫助:

(function() { 
    // Your code here 
})(); 
0

您可以添加任意加載功能齊全或網格功能齊全像圖所示,這將幫助你做的jqGrid

一些操作
height : '550', 
    width : '787', 
    loadComplete : function() {} 
    gridComplete:function(){} 
0

您好我想你應該首先檢查是jQuery和你要使用的方法被定義或沒有

如果(typeof運算(jQuery的)!= '未定義' & &的typeof($。阿賈克斯)!= '不確定'){
//你的代碼會來到這裏
}

0

我不喜歡上面的 電話,就是JSONP實際上可以 文檔準備 事件

你確定那之前exectued?請注意,您可能仍然有loading..etc
我猜你需要使用的圖片:

$(window).load(function() { 
    $.getJSON(_secureHost + '/base/members/current.aspx?callback=?', function (data) { 
     initPage(data); 
    }); 
}); 

Link

0

我用footable jQuery插件。這爲我工作:

if ($.fn.footable) 
{...} 

jQuery的版本 - 1.9.1 footable版本 - 0.5

相關問題