¿Cómo recibo un archivo JSON con AJAX y lo analizo con javascript?

Estoy tratando de analizar este JSON muy largo y complicado que me da Foursquare. Esta es mi solicitud de 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 es una función que estoy haciendo para ordenar el JSON y mostrar los elementos relevantes en la página. El primer problema que tengo es que no sé cómo decirle a la función de éxito que debería tratar con los datos recibidos del servidor. ¿Se almacenan estos datos en una variable en algún lugar? Actualmente estoy haciendo getVenues (datos) pero me dice que ‘datos’ no es una variable definida. Sin embargo, muchos tutoriales en línea parecen estar contentos con solo hacer una función a estos “datos” místicos y los de ellos parecen funcionar.

A continuación, estoy teniendo problemas para analizar el JSON en sí. Aquí hay una versión abreviada de JSON con la que estoy tratando de tratar: http://pastie.org/4382619 . ¿Cómo selecciono los nombres del lugar y las identificaciones, etc., y los muestro en la página?

Gracias

Deberías hacer:

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

Le está diciendo a ajax: “use la función getVenues”, no “use el valor de getVenus (datos)”. En cuanto a la segunda pregunta:

 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 } } 

Es probable que los tutoriales que ve en línea declaren la callback success como una función anónima. En esos casos, los data no se pasan a una función, se declaran como el parámetro de esa función. jQuery es lo suficientemente bueno como para manejar pasar la respuesta de la llamada AJAX a la función de éxito como el primer parámetro, cualquiera sea el nombre que elijas (los data simplemente tienen más sentido).

Además, si especifica dataType: 'json' en su llamada $.ajax() , jQuery analizará la respuesta JSON antes de pasarla a esa función, asegurándose de que sea JSON válido y que tenga un objeto con el que trabajar dentro de la función. Si la respuesta no es JSON válida, la callback correcta no se ejecutará, y en su lugar se ejecutará la callback de error (si ha especificado una).

En su caso, está pasando una referencia de función, por lo que suponiendo que su función getVenues se vea así:

 function getVenues(data) { // do something } 

entonces simplemente puedes hacer:

 success: getVenues 

en el objeto estás pasando a $.ajax() .

La propiedad de éxito del objeto en su llamada ajax solo necesita un nombre de función o un objeto de función. O le das solo el nombre, así:

  $.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 }); 

o haces esto:

  $.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) } });