1

YouTubeビデオのタイトルを取得しようとしています。だから私はjQueryを使ってjsonを解析しています。ただし、非同期で動作するため、ページが読み込まれた後に答えが返されます。結果は次のとおりです。

http://www.youtube.com/watch?v=Ym0hZG-zNOk(未定義)

どうすれば修正できますか?

ありがとう。

http://jsfiddle.net/3vQht/

<html>

<head>
    <script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
    <script>
        var link = "http://www.youtube.com/watch?v=Ym0hZG-zNOk";

        var videoID = link.substring(link.indexOf("=") + 1, link.length);

        document.writeln("<a target='_blank' href='" + link + "'>" + link.bold() + "</a> (" + name(videoID) + ")<br>");

        function name(value) {
            var source = "http://gdata.youtube.com/feeds/api/videos/" + value + "?v=2&prettyprint=true&alt=jsonc&callback=?";
            var fin;

            $.getJSON(source, function(json) {
                fin = json.data.title;
                console.log(fin);
            });

            return fin;
        }
    </script>
</head>

<body>
</body>

</html>
4

4 に答える 4

3

こんにちは、
ここに解決策があります:)

<script type="text/javascript">
    function name(value) {
        var source = "http://gdata.youtube.com/feeds/api/videos/" + value + "?v=2&prettyprint=true&alt=jsonc";
        $.ajax({
            type: 'GET',
            url: source,
            contentType: "application/json",
            dataType: 'json',
            success: function (json) {
                alert("here is the title: "+json.data.title+" .Use it how you want!");
            },
            error: function (e) {
                alert("error");
            }
        });
    }

    $(document).ready(function() {
        var link = "http://www.youtube.com/watch?v=Ym0hZG-zNOk";
        var videoID = link.substring(link.indexOf("=") + 1, link.length);
        name(videoID);
    });
</script>

データを同期させたい場合は、次のバージョンを使用してください。

 $.ajax({
            type: 'GET',
            url: source,
            async: false,
            contentType: "application/json",
            dataType: 'json',
            success: function (json) {
                alert("here is the title: "+json.data.title+" .Use it how you want!");
            },
            error: function (e) {
                alert("error");
            }
        });
    }
于 2012-12-01T23:06:28.533 に答える
1

getJSONは非同期であるため、にreturn fin;達したとき、データはまだフェッチされていません。

JSONに依存するものはすべて、成功コールバック内にある必要があります。

于 2012-12-01T22:12:18.607 に答える
0

必要に応じて、データを同期的にフェッチすることもできます。パラメータについては、 jQuery.ajax()のドキュメントを確認してasyncください。

編集:JSONPを使用してデータを読み込んでいること、およびそれを同期的に行うことはできないことを理解しました。代わりに非同期コールバックを使用する必要があります。

于 2012-12-01T22:35:53.880 に答える
0

私は彼らのAPIで遊んだことはありませんが、簡単に見てみましょう

https://developers.google.com/youtube/2.0/developers_guide_json

jsonpコールバックをサポートしていることを示しているため、データをコールバック関数に送信するスクリプトを追加できます(URLの最後に&callback = yourFunctionを追加するだけです)。

function prependScriptFromUrl(s){
  var a=document.createElement("script");
  var b=document.getElementsByTagName('head')[0];
  a.src=s;
  b.insertBefore(a,b.firstChild)
}
于 2012-12-01T22:53:40.973 に答える