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)を実行していますが、「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に言っています:「getVenus(data)値を使用する」ではなく、「getVenues関数を使用する」。2番目の質問について:

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 呼び出しのオブジェクトの success プロパティには、関数名または関数オブジェクトのみが必要です。次のように、名前だけを付けます。

    $.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 に答える