2012-01-05 18 views
0

このようなクリック可能なギャラリー(http://www.aideffectiveness.org/busanhlf4/vimeo/php-example.php)を作成しようとVimeo APIを使いこなすようになりました。しかし、コードの一部をサイトの他の部分からコードを編成する方法として「script.js」ファイルに移動したとき、jsonコールバックは「embedVideo」関数が定義されていないと言っています。何か案は?機能が定義されていないOEmbed Vimeo API

"script.js" ファイルは、ページの下部に配置され、以下がありますされています

var NS = NS || NS; 

NS = { 

    videoInit: function() { 

    var oEmbedUrl = 'http://vimeo.com/api/oembed.json'; 
    var oEmbedCallback = 'embedVideo'; 
    var videoid = ""; 

    if(videoid == ''){ 
     videoid = '23515961'; 
    } 

    function embedVideo(video) { 
     var videoEmbedCode = video.html; 
     document.getElementById('embed').innerHTML = unescape(videoEmbedCode); 
    } 

    function init() { 
     loadScript(oEmbedUrl + '?url=http://vimeo.com/' + videoid + '&height=380&width=700&callback=' + oEmbedCallback); 
    } 

    function loadScript(url) { 
     var js = document.createElement('script'); 
     js.setAttribute('src', url); 
     document.getElementsByTagName('head').item(0).appendChild(js); 
    } 

    init(); 
    } 
} 
$(function() { 
    NS.videoInit(); 
}); 

HTML:

<div id="wrapper"> 
    <div id="embed"></div> 
</div> 

答えて

1

embedVideoは、内部のローカル(プライベート)関数ですinitメソッドのそれの外にそれを見ることはできません。だからあなたのAJAXコールバックがそのエラーを投げているのです。それはそれはしかし、それはまだembedVideoがあることを私に告げる私は私のスクリプトファイル内でこのコードを配置

NS = { 
    embedVideo: function(video) { 
    var videoEmbedCode = video.html; 
    document.getElementById('embed').innerHTML = unescape(videoEmbedCode); 
    }, 

    videoInit: function() { 

    var oEmbedUrl = 'http://vimeo.com/api/oembed.json'; 
    var oEmbedCallback = 'embedVideo'; 
    var videoid = ""; 

    if(videoid == ''){ 
     videoid = '23515961'; 
    } 
+0

あなたのAJAXコールバックに見えるのですですので

あなたは、適切な方法NSのembedVideoをすることによってこの問題を解決することができます未定義。しかしこれはうまくいきました:それをよりきれいにする方法はありますか? 'function embedVideo(video){ var videoEmbedCode = video.html; document.getElementById( '埋め込み')。innerHTML = unescape(videoEmbedCode); } NS = {...} – user906080

+0

私は単にembedVideoをNSのメソッドにします。あるいは、他のユーティリティオブジェクトにアタッチすることもできます。いずれにしても、Initの内部ではローカル関数として動作しません。 –

+0

これは私が今持っているものです。 embedVideoがNSのメソッドである場合でも、それはまだ動作しません。 http://jsfiddle.net/Kwmtn/3/ – user906080

関連する問題