解析http响应的Javascript错误

时间:2017-10-01 16:08:38

标签: javascript ajax api http

我试图在Javascript中解析来自www.skiddle.com API的响应:

$.ajax({
        url: 'http://www.skiddle.com/api/v1/events/search/?api_key=myapikey' + '&latitude=' + lat + '&longitude=' + long + '&radius=800&eventcode=LIVE&order=distance&description=1',
        type: "GET",
        success: function(response) {
        var list = [];
        $(response).find("results").each(function() {
        var el = $(this);
        var obj = {
                   "eventname": el.find("eventname").text(),
                   "imageurl" : el.find("imageurl").text(),
                  };
        list.push(obj);
        });

响应实际上有results属性,数组中有一个元素:

{error: 0, totalcount: "1", pagecount: 1, results: Array(1)}

但我似乎无法正确解析它,$(response).find("results")什么都不返回。

2 个答案:

答案 0 :(得分:2)

如果您确定答案中会有result数组属性,则可以使用response.results来为您提供数组。

success: function(response) {

  $.each(response.results,function(indx,item){
       console.log(item);
       var obj = {  
                    eventname: item.eventname,
                    imageurl : item.imageurl
                 };
      list.push(obj);
  });

}

假设list是之前定义的数组。

此外,如果您确定阵列中只有一个项目,则不需要循环,您可以通过response.results[0]

访问它
success: function(response) {
  if (response.results.length>0) {
     var obj = { eventName: response.results[0].eventname,
                 imageurl : response.results[0].imageurl };
     list.push(obj);
  }
}

我还注意到你的新对象与你正在迭代的对象具有相同的属性名称。在这种情况下,您可以简单地添加相同的对象

 list.push(response.results[0]);

当然这将添加第一个项目,这意味着如果它具有其他属性(eventname和imageurl除外),那么这些属性将出现在您现在要添加到列表中的项目中。

答案 1 :(得分:0)

您获得的回复是JSON,您尝试将其解析为XML

只需使用

即可获得您想要获得的list
success: function(response) {
    var list = (response.results || []).map(function(result) {
        return {  
            eventname: result.eventname,
            imageurl : result.imageurl
        };
    });
}