2011-04-07 10 views
10

मैं myjs.js फ़ाइल में jquery.js को शामिल करना चाहता हूं। मैंने इसके लिए नीचे दिया गया कोड लिखा है।jquery.js को किसी अन्य जेएस फ़ाइल में कैसे शामिल करें?

var theNewScript=document.createElement("script"); 
    theNewScript.type="text/javascript"; 
    theNewScript.src="http://example.com/jquery.js"; 
    document.getElementsByTagName("head")[0].appendChild(theNewScript); 
    $.get(myfile.php); 

5 वीं पंक्ति पर एक त्रुटि दिखाती है जो '$ परिभाषित नहीं' है। मैं jquery.js को शामिल करना चाहता हूं और फिर myjs.js फ़ाइल में $ .get() फ़ंक्शन को कॉल करना चाहता हूं। मैं यह कैसे कर सकता हूँ? कृपया मेरी मदद करें

+0

आप किसी पृष्ठ के बाहर $ .get() का उपयोग करने का प्रयास क्यों कर रहे हैं? – Calum

+0

मुझे लगता है कि आप '$ .get (" myfile.php ") कहना चाहते हैं;' '.get (myfile.php) के बजाय' '। –

+0

संभावित डुप्लिकेट [जांच करें कि jquery लोड हो गया है, तो इसे गलत होने पर लोड करें] (http://stackoverflow.com/questions/1828237/check-if-jquery-has-been-loaded-then-load-it-if -फल्से) –

उत्तर

10

दस्तावेज़ सिर के अंदर एक स्क्रिप्ट टैग जोड़ प्रोग्राम के रूप में यह मतलब नहीं है कि स्क्रिप्ट उपलब्ध हो जाएगा तत्काल। आपको उस फ़ाइल को डाउनलोड करने, पार्स और निष्पादित करने के लिए ब्राउज़र का इंतजार करना चाहिए। कुछ ब्राउज़र स्क्रिप्ट के लिए onload ईवेंट को आग लगाते हैं जिसमें आप अपने तर्क को हुक अप कर सकते हैं। लेकिन यह एक क्रॉस-ब्राउज़र समाधान नहीं है। मैं एक विशिष्ट प्रतीक के लिए "पोल" उपलब्ध होना चाहता हूं, जैसे:

var theNewScript = document.createElement("script"); 
theNewScript.type = "text/javascript"; 
theNewScript.src = "http://example.com/jquery.js"; 
document.getElementsByTagName("head")[0].appendChild(theNewScript); 
// jQuery MAY OR MAY NOT be loaded at this stage 
var waitForLoad = function() { 
    if (typeof jQuery != "undefined") { 
     $.get("myfile.php"); 
    } else { 
     window.setTimeout(waitForLoad, 1000); 
    } 
}; 
window.setTimeout(waitForLoad, 1000); 
+0

कौन से ब्राउज़र ऑनलोड ईवेंट का समर्थन नहीं करते हैं? यह आईई 7 जैसे पुराने ब्राउज़र में भी मेरे लिए ठीक काम कर रहा है। – Christophe

+1

मैंने पढ़ा है (लेकिन व्यक्तिगत रूप से पुष्टि नहीं की है) स्क्रिप्ट टैग के लिए 'ऑनलोड' घटना gecko, opera, आदि में काम करती है जबकि आईई के लिए आपको 'onreadystatechange' को हुक करने की आवश्यकता होती है। Http://unixpapa.com/js/dyna.html और http://blog.lexspoon.org/2009/12/detecting-download-failures-with-script.html –

+0

यह सच है कि जिस तरह से आप ईवेंट को कॉल करते हैं हैंडलर ब्राउज़र पर निर्भर करता है। मैं आधुनिक ब्राउज़र के लिए addEventListener का उपयोग करता हूं और पुराने आईई के लिए attachEvent, बस ठीक काम करता है। – Christophe

4

समस्या यह है कि स्क्रिप्ट तुरंत लोड नहीं होती है, स्क्रिप्ट फ़ाइल के लिए आपके पृष्ठ में डाउनलोड करने और निष्पादित करने के लिए कुछ समय लगता है (jQuery को $ परिभाषित करने के मामले में)।

मैं आपको HeadJS का उपयोग करने की सलाह दूंगा। तो आप कर सकते हैं:

head.js("/path/to/jQuery.js", function() { 
    $.get('myfile.php'); 
}); 
+1

यह। हल किया। सब। मेरे। समस्या का। धन्यवाद। – andufo

0

सरल जवाब है, न। JQuery फ़ाइल घुसपैठियों के लिए बहुत स्पर्शपूर्ण है इसलिए प्रयास न करें। JQuery फ़ाइल में अन्य फ़ाइलों में शामिल होने से अक्सर जेएस कंसोल में त्रुटियां आती हैं, प्लस jQuery को प्रारंभ नहीं किया जाता है जब तक कि फ़ाइल मुख्य दस्तावेज़ में लोड नहीं हो जाती है।

क्षमा करें, खरोंच करें। आप नहीं जानते थे कि आप क्या कर रहे थे।

इस प्रयास करें:

var s = document.createElement('script'); 
s.type = 'text/javascript'; 
s.async = true; 
s.src = 'http://domain.com/jquery.js'; 
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(s); 
0

मैंने पहले इस कोड का इस्तेमाल किया है, और यह काम किया:

var t=document; 
var o=t.createElement('script'); 
o=t.standardCreateElement('script'); 
o.setAttribute('type','text/javascript'); 
o.setAttribute('src','http://www.example.com/js/jquery-1.3.2.js'); 
t.lastChild.firstChild.appendChild(o); 
संबंधित मुद्दे