2010-12-19 4 views
3

저는 이상한 경우에 .getScript이 작동하는 데 문제가 있습니다.차이점 document.createElement ('script') 대 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에 JS 파일을 가져 오려면 Pastebin (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. 어떤 방법이 더 빠르고 효율적입니까?

참고 : 내 코드는 pastebin에서 호스팅되지 않습니다. 내 서버에있는 .js 파일의 내용을 해당 사이트에 업로드하여 공유하기 쉽습니다. 나는 호스팅을 위해 붙여 넣기를 기다리지 않습니다.)

+0

'/ path-to/tweet.js '를 입력하면 해당 파일이 서버에 있습니까? 또는 pastebin에서 url? $ .getScript를 호출하면 동일한 URL을 제공합니까? – Juan

+0

두 스크립트 모두 내 서버의'.js' 파일입니다. 나는 pastebin에서 아무것도로드하지 않을거야. :)'createElement' 메서드를 사용할 때 작동하지만'$ jQ.getScript ('/ path-to/tweet.js');를 실행하면 작동하지 않습니다 –

답변

4

jQuery의 $jQ.getScript()은 비동기 호출입니다. 따라서 getScript() 바로 뒤에 tweetStream()을 호출하면 스크립트가 도착하기 전에 실행됩니다.

대신 tweetStream()을 콜백 (또는 콜백)으로 부를 수 있습니다.

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

하거나 당신이 tweetStream()에서 this의 가치에 대해 걱정하지 않는 경우

.

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

당신이 그것을 못 박았습니다! 정말 고맙습니다! –

+0

안녕하세요 한 가지 문제가 발견되었습니다. 코드는 Chrome, IE, Opera 및 Safari의 최신 안정 버전에서 완벽하게 작동합니다. 그러나 귀하의 방법은 Firefox 3.6에서 작동하지 않습니다. 아마도 매 10 회마다 새로 고칩니다. 그러나'createElement' 메소드는 모든 브라우저에서 작동했습니다. 추신 필자는이 문제와 관련된 모든 문제를 해결하기 위해 적절하게 'this'라고 언급했다. 업데이트 된 코드는 다음과 같습니다. http://pastebin.com/wnP88v7z 어떤 스크립트가 주석인지 언급했습니다. –

+1

@Sahas : jQuery 버그 일 수 있습니다. [버그 추적기] (http://bugs.jquery.com/)가 지금 당장로드되지 않고 있지만 알려진 문제인지 찾기 위해 해당 문제를 검색 할 가치가 있습니다. 작동하지 않는다고 할 때, 콜백 함수가 전혀 작동하지 않는다는 것을 의미합니까? 'alert()'를하면 발사됩니까? – user113716

관련 문제