使用 YouTube API 时未定义变量?

Variable not defined when using YouTube API?

我在使用 YouTube 功能时遇到问题 API。它说其中一个变量未定义,我不确定是什么导致了错误。请帮忙。

http://jsfiddle.net/neowot/p5y4t9co/1/

JS

function QueryGetta0() {
            var TTsearchQuery = 'lana del rey';
            return TTsearchQuery;
}


function QueryGetta1() {            
            $.get(
                "https://www.googleapis.com/youtube/v3/search",{
                    part: 'snippet',
                    maxResults: 1,
                    q: QueryGetta0(),
                    type: 'video',
                    key: 'AIzaSyCvk3NNMQASZgFkCNxIp9jH-l8O0PXhDUo'},
                    function(data) {
                        $.each(data.items, function(i, item){
                            console.log(item);
                            TTsearchResultID = item.id.videoId;
                            console.log(TTsearchResultID);
                        })
                    }
            );  
            return TTsearchResultID;
}



$('#clicker').on('click', function() {        
        alert(QueryGetta1());
});

$.get() 方法如 $.ajax()$.json() 是异步方法,这意味着您在代码执行后接收数据 return TTSearchResultID

这是实现您想要实现的目标的一种方法(我还删除了您无用的 $.each,因为您只请求了一项):

function QueryGetta0() {
            var TTsearchQuery = 'lana del rey';
            return TTsearchQuery;
}


function QueryGetta1() {
    return $.get(
                "https://www.googleapis.com/youtube/v3/search",{
                    part: 'snippet',
                    maxResults: 1,
                    q: QueryGetta0(),
                    type: 'video',
                    key: 'AIzaSyCvk3NNMQASZgFkCNxIp9jH-l8O0PXhDUo'}
            );  
}



$('#clicker').on('click', function() {        
        QueryGetta1()
        .done(function(data) { //Inside this function, do everything you want with data
            var TsearchResultID = data.items[0].id.videoId;
            alert(TsearchResultID);
        });
});

Fiddle : http://jsfiddle.net/p5y4t9co/6/

解释:

$.get returns 一个 jqXHR 对象。在这个对象上我们可以使用 .done(pCallbackOnSuccess).fail(pCallbackOnFail).

请求成功时调用.done方法,回调将接收请求的数据作为参数,如果请求出错,则调用.fail,回调将收到错误对象。

同时使用两者的示例:

    $.get(options)
        .done(function(data) {
            //do what you want with data
        })
        .fail(function(error) {
            //do what you want with the error
        });