在javascript中从url同步解析json

时间:2012-12-01 22:09:42

标签: javascript jquery json synchronous

我正在尝试获取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 个答案:

答案 0 :(得分:3)

HY,
 这是解决方案:)

<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");
            }
        });
    }

答案 1 :(得分:1)

getJSON是异步的,所以当达到return fin;时,尚未提取数据。

依赖于JSON 必须 的所有内容都在成功回调中。

答案 2 :(得分:0)

如果您愿意,还可以同步获取数据。查看jQuery.ajax() documentation async参数。

编辑:只是想到你正在使用JSONP加载你的数据,并且不可能同步这样做。您需要使用异步回调。

答案 3 :(得分:0)

我没有玩过他们的api,但是快看看

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

表示它们支持jsonp回调,因此您可以预先添加一个将数据发送到回调函数的脚本(只需将&amp; callback = yourFunction添加到url的末尾)

function prependScriptFromUrl(s){
  var a=document.createElement("script");
  var b=document.getElementsByTagName('head')[0];
  a.src=s;
  b.insertBefore(a,b.firstChild)
}