在jQuery getJSON之后获取数据

时间:2012-07-30 17:14:53

标签: jquery ajax facebook json facebook-graph-api

我正在尝试通过facebook Graph API获取照片。这是我的代码:

function getImgURL(photos, m) {
  n=0;
  while (typeof photos[n] !== 'undefined') {
    photourl[m] = photos[n].images[2].source;
    n++;
    m++;
  }
}

$('document').ready(function() {
  var url = "https://graph.facebook.com/179877662120200";
  var json = $.ajax(url);
  console.log(json);
  console.log(json.responseText);
  var photos = $.parseJSON(json);
  console.log(photos);
  console.log(photos);
  var m = 0;
  getImgURL(photos, m);
  while (typeof photos.paging !== 'undefined') {
    json = $.ajax(photos.paging.next);
    photos = $.parseJSON(json);
    getImgURL (photos, m);
  }
});

因此,查看日志,它将变量json作为对象返回。该对象的一个​​属性是“responseText”,但当我尝试将其打印到控制台时,它返回“undefined”

2 个答案:

答案 0 :(得分:3)

AJAX / JSON-P请求(通常是 - 总是在JSON-P的情况下)异步操作 - 您需要在回调中接收和处理响应,而不是在请求之后直接处理。

您认为正在获取的对象实际上是由jQuery生成的延迟对象,而不是响应。

所以:

$.getJSON(url).done(function(response) {
    console.log(response); //here's your response
});

或者,如果您之后因任何原因而声明回调:

var req = $.getJSON(url);
//other, synchronous code here
req.done(function(response) { console.log(response); });

其他一些观点:

1)jQuery自动解析作为JSON-P请求的一部分返回的JSON字符串,因此您不需要像现在这样自己解析它

2)你的n var是(貌似)全球

3)您可能希望改进缩进,因为代码不具备超级可读性

4)你的循环可以简化为while(photos[n]) {...

答案 1 :(得分:2)

var json = $.ajax({
    'url': "https://graph.facebook.com/179877662120200",
    'success': function(json) {
        console.log(json);
        console.log(json.responseText);
    }
});