1

FacebookのGraphAPIを介して写真を取得しようとしています。これが私のコードです:

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がオブジェクトとして返されます。オブジェクトのプロパティの1つは「responseText」ですが、これをコンソールに出力しようとすると、「undefined」が返されます。

4

2 に答える 2

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)あなたのnvarは(一見)グローバルです

3) コードが非常に読みにくいため、インデントを改善することをお勧めします。

4)ループは次のように単純化できますwhile(photos[n]) {...

于 2012-07-30T17:20:21.560 に答える
2
var json = $.ajax({
    'url': "https://graph.facebook.com/179877662120200",
    'success': function(json) {
        console.log(json);
        console.log(json.responseText);
    }
});
于 2012-07-30T17:24:31.127 に答える