2011-01-07 30 views
7

Sitemde, sayfa yüklendikten sonra başka bir (güvenli) sunucudan verileri alan bir jquery işlevi var. Bir jsonp çağrısı kullanarak Şu anda belge hazır olaydan sonra bu verileri yüklemek: Yukarıdaki çağrısı hakkında sevmiyorum NeJQuery'in belge hazır olayı kullanılarak yüklenmediğini sınayın.

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

, jsonp aslında bu suretle yavaşlatarak, belge hazır olaydan önce exectued edilebilmesidir sayfa yükleme Ben sayfanın içine jquery (yani komut dosyası etiketi kullanarak başvurmuyor) dahil, o zaman aşağıdaki kod sayfaların daha hızlı yüklenmesi harika çalışıyor ve: Her sayfada jquery dahil

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

Ama ben bir 23k havai olduğunu d önlemek ister. Jquery yüklenip yüklenmediğini ve jquery yüklendiğinde sadece initPage() işlevini beklemeyi nasıl test edebilirim?

Düzenleme: Sonra exectue olayı jquery yüklü ise tekrar tekrar kontrol etmek ve ihtiyaç daha kesin olmak gerekirse. Ben jquery kontrolü yaptığında bir preinit oluşturduk : Bir zamanlayıcı işi

Çözüm .. çözüm olabilir. Sayfam yüklemesi daha hızlı olamazdı :). Herkese teşekkürler!

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

cevap

5

Ben sadece jQuery nesnesi olup olmadığını görmek için

if (jQuery) { 
    ... 
} 

kullanabilirsiniz düşünüyorum. Daha iyi Tamam

, şöyle olacaktır:

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

veya

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

DÜZENLEME:

yükü hakkında veya jQuery nesnesi yüklü olup olmadığını merak etmeyin. aynen bu şekilde, $(document).ready olmadan kod yürütmesine sonra düzenli <script src="..."> etiketini kullanarak jQuery kütüphanesini içerir ve varsa:

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

O çalışacaktır. $(document).ready bölümü, DOM'ın henüz yüklenmemiş olduğundan, henüz yüklenmemiş olan DOM öğelerini değiştirmeye çalışmak için tam olarak yüklendiğinden emin olmak içindir. Ajax işlevselliği dahil jQuery kütüphanesinin kendisi hemen orada olacak. senin initPage(data) çağrı ben öyle varsayalım DOM kullanıyorsa

Şimdi, böyle, yani bir onay bırakabilir:

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

Ancak, bu olacağını sanmıyorum çoğu durumda gerekli.

+0

şu neredeyse o. ama aslında jquery'yi yüklemek için ne kadar süreceğini bilmiyorum. JQuery yüklenene kadar bu kontrolü tekrarlamak zorundayım. Her 10 ms'yi kontrol eden bir zaman yaratabilirim .. Ama bu iyi hissetmiyor .. – AyKarsi

+1

Ah, demek istediğin bu mu? JQuery'nin yüklü olup olmadığını test etmek istediğini sanıyordum. Bu durumda, jquery'nin

1

İşlevinizi çalıştıran komut dizininizin üstünde jQuery içeren komut dosyasını yerleştirdiğiniz sürece, düzgün çalışmalıdır.

yerine hazır fonksiyonunun bu da komut tamamlayan yardımcı olabilir:

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

Bu sadece $ (document) .ready (function() {} ile aynıdır. Sadece kısa bir versiyonu. –

+0

JQuery içermeyen belge yükleri olarak işlevleri çalıştırmak için kullanıyorum. JQuery'nin bunun işlevselliğini değiştirdiğini bilmiyor muydu? – Olical

+0

@Matt Bu, $ (function() {...}); ':) @ Wolfy87 olur. Bu, kodu kapsüllemek için güzel bir yoldur, ancak çok değişmez. Sonra tekrar, posterimizin çok fazla değişime ihtiyacı olduğunu düşünmüyorum. –

0

ekleyebilir ya tam fonksiyon veya ızgara tam işlevini yükleyebilirsiniz gösterildiği gibi jqGrid

üzerinde bazı işlemler yapmak için yardımcı olacaktır aşağıda
height : '550', 
    width : '787', 
    loadComplete : function() {} 
    gridComplete:function(){} 
0

hi ben Önce o

tanımlanır jQuery ve kullanmak için gidiyoruz yöntem olup olmadığını kontrol etmelisin

(! = 'Tanımsız' & & typeof ($. Ajax)! = 'Tanımsız' typeof (jQuery))

0

{
// kod buraya
gelecek} eğer ne yukarıdaki çağrısı hakkında sevmiyorum, jsonp belgenin hazır olay

bundan emin olmadan önce aslında exectued edilebilir olmasıdır ?! Hala
Kullanabileceğin gerekiyor galiba loading..etc resimlere sahip olabilir dikkat ediniz: Ben footable jquery eklentisi kullanıyordum

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

Link

+0

Aslında jsonp'u mümkün olduğunca erken yürütmek istiyorum. Hazır belge, dom manipülasyon için hazırdır. manipülasyona başlamadan önce belgeye hazır olduğum sürece iyiyim. – AyKarsi

0

. Bu benim için çalıştı:

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

jquery sürümü - 1.9.1 footable sürümü - 0.5

İlgili konular