Différence entre document.createElement ( 'script') vs jQuery .getScript
-
11-10-2019 - |
Question
J'ai eu un problème se .getScript
au travail dans quelques rares cas.
Par exemple, cela fonctionne pour charger les scripts uniquement en cas de besoin.
function twitterSDK() {
$jQ.getScript('http://platform.twitter.com/widgets.js');
}
function diggShare() {
$jQ.getScript('http://widgets.digg.com/buttons.js');
}
function buzzShare() {
$jQ.getScript('http://www.google.com/buzz/api/button.js');
}
Cependant, il ne semble pas travailler sur quelques scripts que j'ai écrit. Si je l'appelle .getScript
chercher ce fichier JS je l'ai téléchargé sur Pastebin ( http://pastebin.com/GVFcMJ4P ) et rien tweetStream();
d'appel arrive. Cependant, si je fais ce qui suit cela fonctionne:
var twitter = document.createElement('script');
twitter.type = 'text/javascript';
twitter.async = true;
twitter.src = '/path-to/tweet.js';
$jQ('.twitter-section').append(twitter);
tweetStream();
Qu'est-ce que je fais mal? Toute aide serait génial, merci!
P.S. Quelle méthode est plus rapide ou plus efficace?
Remarque: Mon code n'est pas hébergé sur Pastebin, je viens de téléchargé le contenu du fichier .js qui est sur mon serveur à ce site il est donc facile à partager. Je ne suis pas sangsue de pastebin pour l'hébergement;)
La solution
Le $jQ.getScript()
jQuery est un appel asynchrone. Donc, si vous appelez tweetStream()
immédiatement après la getScript()
, il courrait avant que le script est arrivé.
Vous pouvez appeler tweetStream()
de (ou) un rappel à la place.
$jQ.getScript('/path-to/tweet.js', function() {
tweetStream();
});
ou si vous ne se soucient pas de la valeur de this
dans tweetStream()
.
$jQ.getScript('/path-to/tweet.js', tweetStream);