/ / Тест, ако jquery е заредено, без да се използва готово за документи събитие - jquery, готов за документи

Тествайте, ако е заредено заявката, без да се използва готовото за документа събитие - jquery, готово за документи

В моя сайт имам функция jquery, която извлича данни от друг (защитен) сървър веднага след като страницата се зареди. С помощта на повикване jsonp понастоящем зареждам тези данни след събитие, готово за документи:

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

Това, което не ми харесва в горния разговор, е товаjsonp може действително да бъде препратена преди събитието, готово за документи, като по този начин забави натоварването на страницата. Така че, ако включа jquery вътре в страницата (т.е. не се отнася до използването на маркера на скрипта), следният код работи чудесно и страницата се зарежда по-бързо:

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

Но като включвам jquery на всяка страница е 23k режийни, който бих искал да избегна.Как мога да тествам, за да видя дали jquery е заредена и само превъзхожда функцията initPage (), когато jquery е зареден?

Редактиране: За да бъда по-точен, трябва да проверявам многократно, ако е зареден jquery и след това да се извърши събитието. Работата с таймер може да бъде решението.

Решение: Аз създадох preinit, който прави проверката на 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 за отговор № 1

Мисля, че бихте могли да го използвате

if (jQuery) {
...
}

за да видите дали jQuery обект съществува.

Добре, по-добре би било:

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

или

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

РЕДАКТИРАНЕ:

Не се притеснявайте за режийните разходи или за това дали е зареден обект jQuery.Ако просто включите библиотеката jQuery с помощта на редовна <script src="..."> маркирайте и след това изпълнете кода без $(document).ready, като този:

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

Ще работи. Най- $(document).ready част е само за да се гарантира, че DOM е напълно зареденапреди да отидете да опитате да промените DOM елементи, които още не са заредени. Самата библиотека jQuery, включително функционалността на Ajax, ще бъде там веднага.

Сега, ако си 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>

Не смятам обаче, че това ще е необходимо в повечето ситуации.


1 за отговор № 2

Докато поставяте маркера на скрипта, който включва jQuery над маркера на скрипта, който изпълнява функцията ви, трябва да работи добре.

Опаковането на скрипта вместо в готовата функция може да помогне:

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

0 за отговор № 3

Можете да добавите или пълна функцията за зареждане, или функцията за попълване на мрежата, както е показано по-долу, което ще ви помогне да направите някои операции на jqgrid

 height : "550",
width : "787",
loadComplete : function() {}
gridComplete:function(){}

0 за отговор № 4

Здравейте Мисля, че първо трябва да проверите дали е jquery и методът, който ще използвате е дефиниран или не

ако (typeof (jQuery)! = "undefined" && typeof ($ .aiax)! = "undefined") {
// кодът ви ще дойде тук
}


0 за отговор № 5

Това, което не харесвам по-горе е, че jsonp може действително да бъде извършено преди готов документ събитие

сигурен ли си в това?! моля, имайте предвид, че все още може да има изображения зареждащи ..etc
Предполагам, че трябва да използвате:

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

връзка


0 за отговор № 6

Бях с помощта на плъгин jquery плъгин. Това работи за мен:

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

версия на jquery - 1.9.1 ход версия - 0.5