2011-01-07 10 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 भूमि के ऊपर जो मैं है से बचने के लिए पसंद है। मैं यह देखने के लिए कैसे परीक्षण कर सकता हूं कि 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 भाग केवल यह सुनिश्चित करने के लिए है कि डीओएम तत्वों को बदलने की कोशिश करने से पहले डीओएम पूरी तरह से लोड हो गया है जो अभी तक लोड नहीं हैं। एजेक्स कार्यक्षमता समेत jQuery लाइब्रेरी स्वयं ही वहां होगी।

अब, अपने initPage(data) कॉल डोम, जो मुझे लगता है यह करता है का उपयोग करता है, तो आप एक जांच है कि में डाल सकता है, इस तरह:

<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

thats लगभग यह। लेकिन मुझे नहीं पता कि वास्तव में jquery लोड करने में कितना समय लगेगा। जब तक jquery लोड नहीं हो जाता है तब तक मुझे उस चेक को दोहराना होगा। मैं एक समय बना सकता हूं जो हर 10 एमएमएस या उससे भी ज्यादा जांचता है .. लेकिन यह अच्छा नहीं लगता .. – AyKarsi

+1

आह, क्या आपका मतलब है? मैंने सोचा कि तुम्हारा मतलब था कि अगर आप jQuery को लोड किया गया था तो आप परीक्षण करना चाहते थे। उस स्थिति में, मुझे पूरा यकीन है कि जब तक आप '

1

जब तक आप स्क्रिप्ट टैग डालते हैं जिसमें आपके स्क्रिप्ट टैग के ऊपर jQuery शामिल होता है जो आपके फ़ंक्शन को चलाता है तो उसे ठीक काम करना चाहिए।

तैयार समारोह के बजाय इस में अपनी स्क्रिप्ट रैपिंग मदद मिल सकती है:

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

यह $ (दस्तावेज़) .ready (function() {}) जैसा ही है। बस एक शॉर्टेंड संस्करण। –

+0

मैं इसे फ़ंक्शन चलाने के लिए उपयोग करता हूं क्योंकि jQuery के बिना दस्तावेज़ लोड शामिल है। मुझे नहीं पता था कि jQuery इस की कार्यक्षमता को बदलता है? – Olical

+0

@ मैट यह '$ (फ़ंक्शन() {...}) होगा;' :) @ वोल्फ्य 87 यह कोड को समाहित करने का एक अच्छा तरीका है, लेकिन यह बहुत कुछ नहीं बदलता है। फिर फिर, मुझे नहीं लगता कि हमारे पोस्टर को बहुत सारे बदलाव की जरूरत है। –

0

आप जोड़ने या तो पूरा समारोह या ग्रिड पूरा समारोह लोड कर सकते हैं पता चला की तरह है जिसके नीचे आप jqgrid

पर कुछ आपरेशन करने के लिए मदद मिलेगी
height : '550', 
    width : '787', 
    loadComplete : function() {} 
    gridComplete:function(){} 
0

हाय मुझे लगता है कि आप पहली बार जांच करनी चाहिए कि jQuery और विधि आप का उपयोग करने जा रहे हैं परिभाषित किया गया है या नहीं

अगर (typeof (jQuery)! = 'अनिर्धारित' & & typeof ($। Ajax)! = 'अनिर्धारित') {
// अपने कोड यहाँ आ जाएगा
}

0

क्या मैं ऊपर कॉल के बारे में पसंद नहीं है, कि jsonp वास्तव में दस्तावेज़ तैयार घटना

आप इस बारे में सुनिश्चित कर रहे हैं इससे पहले कि exectued किया जा सकता है ?! कृपया ध्यान दें कि आप अभी भी छवियों loading..etc
मुझे लगता है कि आप उपयोग करने की आवश्यकता हो सकता है:

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

Link

+0

मैं वास्तव में जितनी जल्दी हो सके jsonp निष्पादित करना चाहता हूं। दस्तावेज तैयार करने का मतलब है, डोम हेरफेर के लिए तैयार है। जब तक मैं मैनिपुलेटिंग शुरू करने से पहले तैयार दस्तावेज़ का सम्मान करता हूं, मैं अच्छा हूं। – AyKarsi

0

मैं footable jQuery प्लगइन का उपयोग कर रहा था। यह मेरे लिए काम किया:

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

jQuery संस्करण - 1.9.1 footable संस्करण - 0.5

संबंधित मुद्दे