2011-04-07 23 views
10

Quiero incluir jquery.js en el archivo myjs.js. Escribí el código a continuación para esto.¿Cómo incluir jquery.js en otro archivo 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); 

Aparece un error en la 5ª línea que es '$ no definido'. Quiero incluir jquery.js y luego quiero llamar a la función $ .get() en el archivo myjs.js. ¿Cómo puedo hacer esto? Por favor, ayúdenme

+0

¿Por qué intentas usar $ .get() fuera de una página? – Calum

+0

Supongo que quisiste decir '$ .get (" myfile.php ");' en lugar de '$ .get (myfile.php);'. –

+0

posible duplicado de [verificar si se ha cargado jquery, luego cargarlo si es falso] (http://stackoverflow.com/questions/1828237/check-if-jquery-has-been-loaded-then-load-it-if -false) –

Respuesta

10

Al añadir una etiqueta de script en el encabezado del documento mediante programación no significa necesariamente que el guión estará disponible inmediatamente. Debería esperar a que el navegador descargue ese archivo, lo analice y lo ejecute. Algunos navegadores activan un evento onload para secuencias de comandos en las que puede conectar su lógica. Pero esta no es una solución de navegador cruzado. Preferiría "sondear" para que un símbolo específico esté disponible, así:

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

¿Qué navegadores no admiten eventos de carga? Está funcionando bien para mí incluso en navegadores más antiguos como IE 7. – Christophe

+1

He leído (pero no confirmado personalmente) que el evento 'onload' para etiquetas de script funciona en gecko, opera, etc, mientras que para IE necesitas enganchar' onreadystatechange'. Consulte http://unixpapa.com/js/dyna.html y http://blog.lexspoon.org/2009/12/detecting-download-failures-with-script.html –

+0

Es cierto que la forma en que llama al evento controlador depende del navegador. Uso addEventListener para navegadores modernos y attachEvent para IE antiguo, funciona bien. – Christophe

4

El problema es que el script no se carga al instante, el archivo de script tarda un tiempo en descargarse en su página y ejecutarse (en el caso de jQuery para definir $).

Yo le recomendaría que use HeadJS. entonces usted puede hacer:

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

esto. resuelto todas. mi. problemas. Gracias. – andufo

0

Respuesta simple, No. El archivo jQuery es muy delicado para los intrusos, así que no intentes . Unir otros archivos en el archivo jQuery a menudo provocará errores en la consola JS , PLUS jQuery no se inicializa hasta que el archivo se cargue en el documento principal .

Lo sentimos, rayar eso. No sabía muy bien lo que estabas haciendo.

Prueba esto:

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

He utilizado este código antes, y funcionó:

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); 
Cuestiones relacionadas