【问题标题】:How to use a jsonp callback function with api如何在 api 中使用 jsonp 回调函数
【发布时间】:2018-08-12 06:30:37
【问题描述】:

我正在尝试调用 BandsInTown api,使其在我的请求 url 中使用 &callback= parameter 返回一个 jsonp 对象。我对它如何与 Jquery 调用结合使用感到困惑。我的代码看起来像这样,但没有做任何事情:

    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提前感谢您的任何帮助或建议!

【问题讨论】:

    标签: javascript jquery jsonp


    【解决方案1】:

    JSONP 回调函数与您要调用的函数 (bandsInInfo) 不同。当您将 dataType 定义为 'jsonp' 时,jQuery 将为您管理回调函数。所以,我会从您的查询字符串中删除最后一个参数。

    您应该将成功和错误属性添加到您的 $.ajax 选项中:

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

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 2020-03-30
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      相关资源
      最近更新 更多