Итак, у меня есть сервер Node.js, этот маршрут делает одно. Когда вызывается нажатием кнопки на стороне клиента, он идет сюда и получает данные из внешнего API.

app.get('/ajaxcall', function(req, res) {
const options = {
    url: 'hidden url',
    method: 'POST',
};

request(options, function(err, request, body) {
    if (err) {
        request.send('There was an error with fetching API');
    }
    else {
        console.log(res.statusCode);
        return res.end(JSON.stringify(body));
    }
});
});

Затем у меня есть этот бит, который идет и получает эти данные с сервера.

$(document).ready(function(){
$('#searchButton').click(function(event){
event.preventDefault()
$.ajax({
  type: 'GET',
  url: '/ajaxcall',
})
.done(function(result){
  let data = jQuery.parseJSON(result);
  console.log(data)
  console.log(data[0].formatted_address)
})
.fail(function(xhr, status, error){
  console.log(error)
})
.always(function(data){})
})
})

Дело в том, что console.log(data) выводит все на консоль, но console.log(data.[0].formatted_address) выводит неопределенное.

Я пытаюсь получить данные из этого JSON, которые я получаю, чтобы я мог отобразить их на веб-сайте. Может кто-нибудь сказать мне, почему console.log (formatted_address) не работает на стороне клиента, но работает на стороне сервера? Есть ли способ перебрать этот объект JSON и выбрать нужные мне биты?

Вот как выглядит JSON снимок экрана JSON

0
Durianix 18 Апр 2019 в 03:51

2 ответа

Лучший ответ

Вот пример того, как изменить функцию .done для зацикливания некоторых данных с использованием forEach.

.done(function(result){
  let data = jQuery.parseJSON(result);

  data.results.forEach(function(result) {
        console.log(result.formatted_address);
        console.log(result.geometry.location.lat, result.geometry.location.lng);
        console.log(result.icon);
    });
})
0
John 18 Апр 2019 в 02:12

Если опубликованный вами JSON - это то, что десериализовано в переменную data на внешнем интерфейсе, создается впечатление, что data - это объект JSON, который содержит поле results, которое представляет собой массив вместо сам объект data является массивом.

Попробуйте что-то вроде data.results[0].formatted_address

0
Brian Winkle 18 Апр 2019 в 01:10