2010-12-19 42 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