Узел JS Запросить внешний API и отправить его обратно на клиентскую сторону AJAX - PullRequest
0 голосов
/ 18 апреля 2019

Итак, у меня есть сервер 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 screenshot

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Вот пример того, как изменить функцию .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 голосов
/ 18 апреля 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...