Javascript 将REST YOUTUBE数据API 3中的数据分配给回调函数Jquery之外的变量

Javascript 将REST YOUTUBE数据API 3中的数据分配给回调函数Jquery之外的变量,javascript,jquery,asynchronous,youtube-data-api,jquery-callback,Javascript,Jquery,Asynchronous,Youtube Data Api,Jquery Callback,问题:我想从RESTAPI调用中获取数据,并将其分配给一个变量,然后将其用作另一个函数或用途的输入 功能: function getSongName(id, callback) { var apikey = {My_TOKEN}; var fetchInformation = "https://www.googleapis.com/youtube/v3/videos?key=" +apikey +"&fields=items(snippet(title"

问题:我想从RESTAPI调用中获取数据,并将其分配给一个变量,然后将其用作另一个函数或用途的输入

功能:

function getSongName(id, callback) {
        var apikey = {My_TOKEN};
        var fetchInformation = "https://www.googleapis.com/youtube/v3/videos?key=" +apikey +"&fields=items(snippet(title" +"))&part=snippet&id=" +id;
        $.getJSON(fetchInformation, function (jsonData) {
            fullname = jsonData.items[0].snippet.title;
            callback(fullname);
        });
    }
我在另一个地方调用这个函数

var title = getSongName(youtubeID, function(name) {
                                    console.log("song name is :"+name);
                                });
我根据需要在console.log中获取该值。 现在我想用这个标题

z.innerHTML = '<b>' + title + 'num: ' + j + '</b>';
然后在循环中运行的另一个函数中,我调用上面的函数来获取值

getSongName(youtubeID, idForPlayer,i, z, function(name) {
                                    z.innerHTML = '<b>' + name + '</b>';
                                    debugger;
                                    document.getElementById('elementTagID').appendChild(z);

                                });
getSongName(youtubeID、idForPlayer、i、z、函数(名称){
z、 innerHTML=''+名称+'';
调试器;
document.getElementById('elementTagID').appendChild(z);
});
希望这对其他人有帮助。
谢谢。

您可以在函数外放置一个var声明,如下所示:

var fullname = "";

function getSongName(id, callback) {
        var apikey = {My_TOKEN};
        var fetchInformation = "https://www.googleapis.com/youtube/v3/videos?key=" +apikey +"&fields=items(snippet(title" +"))&part=snippet&id=" +id;
        $.getJSON(fetchInformation, function (jsonData) {
            fullname = jsonData.items[0].snippet.title;
            callback();
        });
    }

但是调用是异步的,所以var只在回调后获取值。。我认为直接使用回调(callback)更合适,就像您在日志记录中所做的那样。

我可能会采取不同的方法,并将结构更改为:

z.innerHTML = '<b><span class="title"></span>num: ' + j + '</b>';
或者对于不支持文本内容的浏览器:

document.querySelector('.title').innerHTML = name;

请参阅以下内容:

此文件的可能副本可能会起作用,但问题是,我正在动态生成此
z.innerHTML
,因此如果我应用您的解决方案,将只打印许多名称中的姓氏。还要考虑到,我希望
j
也是动态的。好吧,如果看不到其余的代码,这有点困难,但是我在这里做了一个简单的说明--为了演示我的代码,也许这会有所帮助。我不知道你为什么说只有姓氏会被打印出来,但也许你有一个循环在某个我们看不到的地方运行。谢谢你克里斯:)我终于成功了!!因此,我所做的不是从函数中取出数据,而是将其他数据注入函数中,并在其中执行操作。我将更新我的初始问题,以显示我为参考做了什么。可以帮助其他人节省工作时间。谢谢大家!!非常感谢。你会把这个
z.innerHTML=''+title+'num:'+j+''放在哪里?另外,分配给
fullname
”的数据在哪里?应该在回调函数中,就像日志记录一样。在我的示例中,我将把这一行放在调用getSongName时传递的函数中。。如下所示:getSongName(1,函数(){z.innerHTML=''+title+'num:'+fullname+'';});但fullame仍可用于该回调函数之外的其他用途。
document.querySelector('.title').textContent = name;
document.querySelector('.title').innerHTML = name;