2010-12-19 40 views
3

我一直有一个问题,.getScript在一些奇怪的情况下工作。document.createElement('脚本')与jQuery之间的区别.getScript

例如,这只适用于在需要时加载脚本。

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

但是,它似乎并没有在我写的几个脚本上工作。如果我打电话.getScript来获取这个我已经上传到Pastebin的JS文件(http://pastebin.com/GVFcMJ4P)并且打电话tweetStream();没有任何反应。但是,如果我按照以下原则进行操作:

var twitter = document.createElement('script'); 
twitter.type = 'text/javascript'; 
twitter.async = true; 
twitter.src = '/path-to/tweet.js'; 
$jQ('.twitter-section').append(twitter); 
tweetStream(); 

我在做什么错?任何帮助将是真棒,谢谢!

P.S.哪种方法更快或更高效?

注意:我的代码不在pastebin上,我只是将我的服务器上的.js文件的内容上传到该网站,因此很容易分享。我不是用来托管pastebin的;)

+0

当你把'/ path-to/tweet.js'是你自己的服务器上的一个文件?或从pastebin的网址?当你调用$ .getScript时,你是否给它同样的url? – Juan 2010-12-19 19:46:52

+0

这两个脚本都是我服务器上的'.js'文件。我没有从pastebin中加载任何东西。 :)它使用'createElement'方法工作,但它不工作,如果我做'$ jQ.getScript('/ path-to/tweet.js');' – 2010-12-19 20:00:28

回答

4

jQuery的$jQ.getScript()是一个异步调用。因此,如果您在getScript()之后立即呼叫tweetStream(),它将在脚本到达之前运行。

您可以拨打tweetStream()来代替回拨。

$jQ.getScript('/path-to/tweet.js', function() { 
    tweetStream(); 
}); 

或者这个,如果你不关心的thistweetStream()值。

$jQ.getScript('/path-to/tweet.js', tweetStream); 
+0

你钉了它!非常感谢! – 2010-12-19 20:41:29

+0

嗨注意到一个问题,您的代码在Chrome,IE,Opera和Safari的最新稳定版本中完美工作。但是你的方法在Firefox 3.6中不起作用。它可能每10次刷新一次左右。然而,'createElement'方法在所有浏览器中都能正常工作。附:我正确地引用了'this'来解决与此有关的任何问题。这是更新后的代码:http://pastebin.com/wnP88v7z我注意到哪个脚本是带有注释的。 – 2010-12-20 01:52:20

+1

@Sahas:可能是一个jQuery错误。 [bug跟踪程序](http://bugs.jquery.com/)目前尚未加载,但可能值得搜索该问题以查看它是否已知。当你说它不起作用时,你的意思是回调函数根本不会触发?如果你做一个'alert()',它会触发吗? – user113716 2010-12-20 01:55:57

相关问题