Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 分别使用两个getJSON调用_Javascript_Jquery_Json_Npr Api - Fatal编程技术网

Javascript 分别使用两个getJSON调用

Javascript 分别使用两个getJSON调用,javascript,jquery,json,npr-api,Javascript,Jquery,Json,Npr Api,我试图使用两个getJSON调用来实现两个不同(但几乎完全相同)的目的。我是个新手,但我能够拼凑出以下代码: $(函数(){ 变量call1,call2; jQuery.when( jQuery.getJSON('https://api.composer.nprstations.org/v1/widget/517ed638e1c8d825471462ff/tracks?format=json&limit=16,函数(数据){ call1=数据; }), jQuery.getJSON('http

我试图使用两个getJSON调用来实现两个不同(但几乎完全相同)的目的。我是个新手,但我能够拼凑出以下代码:

$(函数(){
变量call1,call2;
jQuery.when(
jQuery.getJSON('https://api.composer.nprstations.org/v1/widget/517ed638e1c8d825471462ff/tracks?format=json&limit=16,函数(数据){
call1=数据;
}),
jQuery.getJSON('https://api.composer.nprstations.org/v1/widget/51929bfde1c8886d5ccfb1d9/tracks?format=json&limit=11,函数(数据){
call2=数据;
})
).then(函数(){
if(call1.onNow.song){
var output1=“
    ”; for(call1.tracklist.results中的变量i){ var item1=call1.tracklist.results[i]; if(item1.song.artistName&&item1.song.trackName){ output1+=“
  • ”+item1.song.trackName+”
  • ”; } }; 输出1+='
'; document.getElementById(“call1播放列表”).innerHTML=output1; }; 如果(call2.onNow.song){ var output2=“
    ”; for(call2.tracklist.results中的变量i){ var item2=call2.tracklist.results[i]; if(item2.song.artistName&&item2.song.trackName){ output2+=“
  • ”+item2.song.trackName+”
  • ”; } }; 输出2+='
'; document.getElementById(“call2播放列表”).innerHTML=output2; }; }); });

占位符

占位符
实现上述目标的更简洁的方法:

jQuery.getJSON('https://api.composer.nprstations.org/v1/widget/517ed638e1c8d825471462ff/tracks?format=json&limit=16', function(data) {
    callback(data, 'call1-playlist');
});

jQuery.getJSON('https://api.composer.nprstations.org/v1/widget/51929bfde1c8886d5ccfb1d9/tracks?format=json&limit=11', function(data) {
    callback(data, 'call2-playlist');
});

function callback(data, id) {
    if (data.onNow.song) {
        var $ul = $('<ul/>');

        $.each(data.tracklist.results, function () {
            if (this.song.artistName && this.song.trackName) {
                $ul.append($('<li>' + this.song.trackname + '</li>');
            }
        });

        $('#' + id).html($ul);
    }
}
jQuery.getJSON('https://api.composer.nprstations.org/v1/widget/517ed638e1c8d825471462ff/tracks?format=json&limit=16,函数(数据){
回调(数据“call1播放列表”);
});
jQuery.getJSON('https://api.composer.nprstations.org/v1/widget/51929bfde1c8886d5ccfb1d9/tracks?format=json&limit=11,函数(数据){
回调(数据“call2播放列表”);
});
函数回调(数据,id){
if(data.onNow.song){
var$ul=$(“
    ”); $.each(data.tracklist.results,function(){ if(this.song.artistName&&this.song.trackName){ $ul.append($(“
  • ”+this.song.trackname+”
  • ); } }); $('#'+id).html($ul); } }
在第二次调用中,API似乎没有返回
歌曲
属性。但是,它确实返回了可能合适的
程序
属性。我对NPR API不是很熟悉,但两首歌曲不会同时播放是有道理的

只需改变这一点:

if (call2.onNow.song)
为此:

if (call2.onNow.program)
运行下面的代码片段,看看它是否适合您的需要

$(函数(){
变量call1,call2;
jQuery.when(
jQuery.getJSON('https://api.composer.nprstations.org/v1/widget/517ed638e1c8d825471462ff/tracks?format=json&limit=16,函数(数据){
call1=数据;
}),
jQuery.getJSON('https://api.composer.nprstations.org/v1/widget/51929bfde1c8886d5ccfb1d9/tracks?format=json&limit=11,函数(数据){
call2=数据;
})
).then(函数(){
if(call1.onNow.song){
var output1=“
    ”; for(call1.tracklist.results中的变量i){ var item1=call1.tracklist.results[i]; if(item1.song.artistName&&item1.song.trackName){ output1+=“
  • ”+item1.song.trackName+”
  • ”; } }; 输出1+='
'; document.getElementById(“call1播放列表”).innerHTML=output1; }; if(call2.onNow.program){ var output2=“
    ”; for(call2.tracklist.results中的变量i){ var item2=call2.tracklist.results[i]; if(item2.song.artistName&&item2.song.trackName){ output2+=“
  • ”+item2.song.trackName+”
  • ”; } }; 输出2+='
'; document.getElementById(“call2播放列表”).innerHTML=output2; }; }); });

占位符

占位符
假设$是全局定义的,我想我意识到了我最初遇到的问题。我重新使用了我编写的旧代码,目的几乎相同,但并不完全相同,
onNow.song
是相关的(如果当前有一首歌被列为“正在播放”,它会返回数据)在播放列表中;如果没有,则不会返回任何数据…就像现在运行脚本一样,只有第二次调用有效,因为两个播放列表中都没有“正在播放”的歌曲)。我查看了除此之外的所有代码。