/ / Testet, ob jQuery geladen wird und nicht das Ereignis document ready verwendet - jquery, dokumentbereit

Testen Sie, ob jquery geladen wurde und nicht das Ereignis document ready verwendet - jquery, document-ready

Auf meiner Site habe ich eine jquery-Funktion, die Daten von einem anderen (gesicherten) Server abruft, sobald die Seite geladen ist. Mit einem jsonp Aufruf lade ich diese Daten nach dem document ready Event:

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

Was ich am obigen Aufruf nicht mag, ist dasDer Jsonp kann tatsächlich vor dem Dokumentbereitschafts-Ereignis ausgeführt werden, wodurch die Seitenbelastung verlangsamt wird. Wenn ich also jquery in die Seite einschließe (d. H. Nicht mit dem Skript-Tag referenziere), dann funktioniert der folgende Code großartig und die Seite wird schneller geladen:

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

Aber einschließlich jquery in jeder Seite ist ein 23k Overhead, den ich gerne vermeiden würde. Wie kann ich testen, ob jquery geladen wurde und nur die Funktion initPage () excecute, wenn jquery geladen wurde?

Bearbeiten: Um genauer zu sein, muss ich wiederholt überprüfen, ob jquery geladen ist und dann das Ereignis ausführen. Ein Timer-Job könnte die Lösung sein ..

Lösung: Ich habe eine Preinit erstellt, die den Jquery-Check durchführt. Meine Seite kann nicht schneller sein :). Danke allen!

   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);
});
});
}

Antworten:

5 für die Antwort № 1

Ich denke du könntest es einfach benutzen

if (jQuery) {
...
}

um zu sehen, ob das jQuery-Objekt existiert.

Ok, besser wäre:

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

oder

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

BEARBEITEN:

Machen Sie sich keine Sorgen über den Overhead oder ob das jQuery-Objekt geladen ist. Wenn Sie nur die jQuery-Bibliothek mit einem regulären einschließen <script src="..."> Tag und führen Sie dann Ihren Code ohne die $(document).ready, so was:

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

Es wird klappen. Das $(document).ready Teil ist nur um sicherzustellen, dass das DOM vollständig geladen istbevor Sie herumgehen und versuchen, DOM-Elemente zu ändern, die noch nicht geladen sind. Die jQuery-Bibliothek selbst, einschließlich der Ajax-Funktionalität, wird sofort da sein.

Nun, wenn dein initPage(data) Der Aufruf verwendet das DOM, von dem ich annehme, dass es das tut könnte checken Sie das ein, so:

<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>

Ich glaube jedoch nicht, dass dies in den meisten Situationen notwendig wäre.


1 für die Antwort № 2

Solange Sie das Skript-Tag, das jQuery enthält, über dem Skript-Tag platzieren, das Ihre Funktion ausführt, sollte es funktionieren.

Das Wrapping Ihres Skripts in dieser anstelle der Ready-Funktion kann helfen:

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

0 für die Antwort № 3

Sie können entweder load complete function oder grid complete function wie unten gezeigt hinzufügen, was Ihnen bei einigen Operationen auf jqgrid hilft

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

0 für die Antwort № 4

Hallo, ich denke, Sie sollten zuerst überprüfen, ob jQuery und die Methode, die Sie verwenden werden, definiert ist oder nicht

if (typeof (jQuery)! = "undefiniert" && typeof ($. ajax)! = "undefiniert") {
// Dein Code wird hierher kommen
}


0 für die Antwort № 5

Was ich an dem oben genannten nicht mag ruf an, ist das der jsonp eigentlich kann Vor der Fertigstellung des Dokuments ausgeführt werden Veranstaltung

Bist du dir da sicher?! Bitte beachten Sie, dass Sie möglicherweise noch Bilder loading..etc haben
Ich denke, du musst folgendes benutzen:

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

Verknüpfung


0 für die Antwort № 6

Ich benutze Footable jquery plugin. Das hat für mich funktioniert:

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

jquery Version - 1.9.1 fußbare Version - 0.5