2016-12-31 5 views
1

私のリクエストURLに&callback= parameterを使用してjsonpオブジェクトを返すように、BandsInTown APIを呼び出そうとしています。私はこれがJquery呼び出しと一緒にどのように動作するのか混乱しています。私のコードはこのように見えますが、何もしません。apiでjsonpコールバック関数を使用する方法

var shows=[]; 
    var locat = "Denver,CO"; 
    var artists = ["Twenty One Pilots", "Atmosphere", "Vince Staples", "STRFKR", "Rainbow Kitten Surprise", "Mac Demarco", "Hippo Campus", "Drake", "John Legend", "Rihanna", "Flying Lotus", "MGMT", "Jason Derulo", "M83", "Bon Iver", "Childish Gambino"];  
    for (var i = 0; i < artists.length; i++) { 
     parseEvent(artists[i], locat, shows);  
    } 

function parseEvent(artist, locat, showsObject) { 
    var url = 'http://api.bandsintown.com/artists/' + artist + '/events/search.json?api_version=2.0&app_id=music_matcher&location=' + locat + '&radius=150&callback=bandsInInfo'; 

    $.ajax({ 
     url: url, 
     dataType: 'jsonp', 
     jsonpCallback: 'bandsInInfo' 
    }); 
} 

function bandsInInfo(data) { 
alert("workingBandy"); 
alert(data); 
    var numEvents = Object.keys(data).length;  
    for (var j = 0; j < numEvents; j++) { 

     if (!(data[j].venue.latitude == null && data[j].venue.latitude == 'undefined')) { 
      var element = 
      { 
       "location": {"latitude": data[j].venue.latitude, "longitude": data[j].venue.longitude}, 
       "artist": data[j].artists[0].name, 
       "venue_name": data[j].venue.place, 
       "date": data[j].datetime, 
       "ticket_url": data[j].ticket_url, 
       "ticket_status": data[j].ticket_status, 
       "title": data[j].title 
      }; 

      showsObject.push(element); 
      } 
    } 


} 

また、Jqueryなしでこれを行う方法がある場合は、これはAPIのドキュメントです。応答があなたが指定するコールバック関数に送られるという事実以外に、これについてはあまり言われていません。 https://www.bandsintown.com/api/requests#artists-events何か助けやアドバイスをありがとうございます!

答えて

1

JSONPコールバック関数は、呼び出す関数(bandsInInfo)とは異なります。 jQueryは、dataTypeを 'jsonp'として定義すると、コールバック関数を管理します。だから、私はあなたのクエリ文字列から最後のパラメータを削除します。

あなたは$のアヤックスオプションに成功し、エラーのプロパティを追加する必要があります

function parseEvent(artist, locat, showsObject) { 
var url = 'http://api.bandsintown.com/artists/' + artist + '/events/search.json?api_version=2.0&app_id=music_matcher&location=' + locat + '&radius=150'; 

$.ajax({ 
    url: url, 
    dataType: 'jsonp', 
    success: function(data){ 
    bandsInInfo(data); 
    }, 
    error: function(err){ 
    console.log(err) 
    } 
}); 

}

関連する問題