4

これは少しおかしなことに聞こえるかもしれませんが、私はYouTubeビデオのビデオ情報を取得しようとしています(いくつかのチュートリアルで見ました)基本的にここにコードがあります

    function youtubeFeedCallback1(data) {
        var s = '';
        var k = '';
        s += data.entry.title.$t;
        k += data.entry.media$group.media$thumbnail[2].url;
        vidtitle1=s
        vidthumb1=k

      }
 <script type="text/javascript" id="javaone" src='http://gdata.youtube.com/feeds/api/videos/'+vidid[0]+'?v=2&amp;alt=json-in-script&amp;callback=youtubeFeedCallback1' ></script>

ご覧のとおり、srcに変数「vidid[0]」を挿入しようとしていますが、機能しません。今、私は宿題をしましたが、新しいスクリプト属性を設定し、新しいsrc totを設定すると、それでも機能しません。誰かがここで私を助けることができますか?

4

5 に答える 5

5

あなたがやろうとしていることは、JSONPと呼ばれます。通常の Ajax 呼び出しを使用して別のドメインから JSON をフェッチすることはできないため (セキュリティに影響します)、指定したコールバック関数を呼び出すスクリプトを追加して、JSON を渡す必要があります。他の回答が言うように、スクリプトタグをプログラムで作成する必要があります。ページの読み込み後に機能しないため、これには使用しませdocument.writeん (新しいスクリプトがドキュメント全体を置き換えます)。しかし、非常に簡単な代替手段があります。

function youtubeFeedCallback1(data) {
    var s = '';
    var k = '';
    s += data.entry.title.$t;
    k += data.entry.media$group.media$thumbnail[2].url;
    vidtitle1=s;
    vidthumb1=k;
}

var script = document.createElement('script');
script.src = "http://gdata.youtube.com/feeds/api/videos/" + vidid[0] + "?v=2&amp;alt=json-in-script&amp;callback=youtubeFeedCallback1";
document.body.appendChild(script);

最後の推奨事項: コールバックにグローバル変数がvidtitle1あり、vidthumb1. それらの値で何をする必要があるとしても、コールバックから行います (できればグローバル変数を取り除きます)。そうしないと、うまくいかない可能性があります。データは非同期的にロードされるため、コールバックが実行された後にのみ、変数に値が含まれていることが保証されます。

于 2013-01-28T12:20:38.877 に答える
2

CDATA は正常に動作しますが、document.createElement を使用することも優れた選択肢です。特に、キャッシュ バスティングなど、URL に何らかの値を追加する場合は..

<script type="text/javascript"> 
    var versionJSLink = "/Folder/sub_folder/version.js?version=" + Math.random();
    JSElement = document.createElement('script');
    JSElement.src = versionJSLink;
    JSElement.onload = OnceLoaded;
    document.getElementsByTagName('head')[0].appendChild(JSElement);

    function OnceLoaded() {
        // Once loaded.. load other JS or CSS or call objects of version.js
    }
</script>

楽しむ.. :)

于 2013-03-01T12:51:14.633 に答える
1

document.write it または createElement()/appendChild() のいずれか

var id = "asdf";
document.write('\x3Cscript type="text/javascript" src="foo.js?id=' + id + '">\x3C/script>');
于 2013-01-28T03:14:27.933 に答える
0

function youtubeFeedCallback1(data) {
  var s = '';
  var k = '';
  s += data.entry.title.$t;
  k += data.entry.media$group.media$thumbnail[2].url;
  vidtitle1 = s
  vidthumb1 = k

}


<script id="javaone"></script>

<script>
  
  var fullSrc = "http://gdata.youtube.com/feeds/api/videos/"+vidid[0]+"?v=2&amp;alt=json-in-script&amp;callback=youtubeFeedCallback1";
  
  $('#javaone').attr("src",fullSrc);

</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>

1. 空のスクリプト コンテナーを作成します。2. 変数で完全なリンクを定義します。3. この変数を src 属性として空のスクリプトに設定します。

psはjsで動作するかどうかわかりません。これはjqueryです

于 2014-11-28T13:00:31.807 に答える
0

コード スニペットはページ内のどこにありますか? タグ内にある場合<script>、スクリプト タグが html ではなく JavaScript として解釈されていることが問題です。代わりに、元の script タグからdocument.write、script タグを dom に書き込むために使用できます。

新しいコードは次のようになります。

function youtubeFeedCallback1(data) {
    var s = '';
    var k = '';
    s += data.entry.title.$t;
    k += data.entry.media$group.media$thumbnail[2].url;
    vidtitle1=s
    vidthumb1=k
  }
document.write("<script type=\"text/javascript\" id=\"javaone\" src=\"http://gdata.youtube.com/feeds/api/videos/\"+vidid[0]+\"?v=2&amp;alt=json-in-script&amp;callback=youtubeFeedCallback1\"></script>");

変数にアクセスするにはスクリプト タグを JavaScript で記述する必要がありvididますが、HTML を使用していないため、スクリプト タグを追加するには DOM を操作する必要があります。

于 2013-01-28T03:17:43.190 に答える