0

我正在尝试解析foursquare 给我的这个非常长且复杂的JSON。这是我的 AJAX 请求:

    $.ajax({
      url: 'https://api.foursquare.com/v2/venues/explore',
      dataType: 'json',
      data: 'limit=7&ll='+latitude+','+longitude+'&client_id='+client_id+'&client_secret='+client_secret+'',
      async: false,
      success: getVenues(data)
});

getVenues 是我正在制作的一个函数,用于对 JSON 进行排序并在页面上显示相关内容。我遇到的第一个问题是我不知道如何告诉成功函数它应该处理从服务器接收到的数据——这些数据是否存储在某个变量中?我目前正在做 getVenues(data) 但它告诉我“数据”不是一个定义的变量。然而,许多在线教程似乎很乐意对这个神秘的“数据”做一个功能,而且他们的功能似乎有效。

接下来,我无法解析 JSON 本身。这是我正在尝试处理的 JSON 的缩短版本:http: //pastie.org/4382619。如何选择场地名称和 ID 等并在页面上显示?

谢谢

4

3 回答 3

3

您在网上看到的教程很可能将success回调声明为匿名函数。在这些情况下,data不会将其传递给函数,而是将其声明为该函数的参数。jQuery 可以很好地处理将 AJAX 调用的响应作为第一个参数传递给成功函数,无论您选择如何命名它(data只是最有意义)。

此外,如果您dataType: 'json'$.ajax()调用中指定,jQuery 将在将 JSON 响应传递给该函数之前对其进行解析,以确保它是有效的 JSON 并且您在函数内部有一个可以使用的对象。如果响应不是有效的 JSON,success则不会执行回调,而是会执行error回调(如果您已指定)。

在您的情况下,您正在传递一个函数引用,因此假设您的 getVenuesfunction 如下所示:

function getVenues(data) {
    // do something
}

那么你可以简单地做:

success: getVenues

在您传递给的对象中$.ajax()

于 2012-08-03T08:05:32.283 回答
3

你应该做:

$.ajax({
    // some other code
    success: getVenues
});

您是在告诉 ajax:“使用 getVenues 函数”,而不是“使用 getVenus(data) 值”。至于第二个问题:

var l = data.response.groups.length;
for (var i = 0; i < l; i++) {
    var group = data.response.groups[i];
    var k = group.items.length;
    for (var j = 0; j < k; j++) {
        var venue = group.items[j].venue;
        // use venue as you wish
    }
}
于 2012-08-03T08:05:46.327 回答
2

ajax 调用中对象的成功属性只需要函数名或函数对象。你要么给它一个名字,就像这样:

    $.ajax({
      url: 'https://api.foursquare.com/v2/venues/explore',
      dataType: 'json',
      data: 'limit=7&ll='+latitude+','+longitude+'&client_id='+client_id+'&client_secret='+client_secret+'',
      async: false,
      success: getVenues
});

或者你这样做:

  $.ajax({
      url: 'https://api.foursquare.com/v2/venues/explore',
      dataType: 'json',
      data: 'limit=7&ll='+latitude+','+longitude+'&client_id='+client_id+'&client_secret='+client_secret+'',
      async: false,
      success: function(data) { getVenues(data) }
});
于 2012-08-03T08:06:48.660 回答