Превращение ответа от fetch () в объект JSON - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь получить доступ к некоторым открытым данным.А именно: http://ratings.food.gov.uk/enhanced-search/en-GB/%5E/Newcastle%20Upon%20Tyne/Relevance/0/%5E/Equal5/0/1/10/json

Я хочу взять этот JSON и превратить его в объект JSON, используя JQuery.Я получал ошибки, касающиеся Access-Control-Allow-Origin, поэтому я должен использовать встроенную функцию fetch ().

Я провел некоторое исследование того, как это работает, но я не до конца понимаю, как реализовать это для решения моей проблемы.

В следующем коде я нахожусь:

const proxyurl = "https://cors-anywhere.herokuapp.com/";//CORS Proxy to allow access to FHR API
const FHRNewcastle5 = "http://ratings.food.gov.uk/enhanced-search/en-GB/%5E/Newcastle%20Upon%20Tyne/Relevance/0/%5E/Equal5/0/1/10/json"; // site that doesn’t send Access-Control-*
fetch(proxyurl + FHRNewcastle5) // https://cors-anywhere.herokuapp.com/https://example.com
.then(response => response.json())
.then(contents => console.log(contents))
.catch(() => console.log("Can’t access " + FHRNewcastle5 + " response. Blocked by browser?"))

Я понимаю, что должен изменить его раздел 'console.log', чтобы создать мой объект JSON (по крайней мере, я предполагаю, что так я это делаю).

Извиняюсь, если есть простое решение, я все еще учусь:)

edit: Когда я написал это, я действительно не понимал, как JSON использовался в JavaScript.Поняв, что выборка не будет работать с моим решением, я вместо этого перешел на использование AJAX, и мне стало намного легче его понимать.

1 Ответ

0 голосов
/ 04 декабря 2018

Вы не можете волшебным образом извлечь данные из обещания, не взаимодействуя с then, потому что код не знает, когда обещание разрешается, это может занять 1 миллисекунду или 2 минуты.

Вот 2 примера обработки ваших ответов:

fetch(url) 
  .then(response => response.json())
  .then(contents => {
    // your either do it here
  })
  .catch(() => console.error('error'))

fetch(url) 
  .then(response => response.json())
  .then(contents => {
    doSomething(contents);
  })
  .catch(() => console.error('error'))

function doSomething(data) {
  // or do it here
}

Я думаю, что корень этой проблемы в том, что вы не до конца понимаете обещания,Я предлагаю прочитать этот и / или посмотреть несколько видео на YouTube об этом.

В качестве альтернативы есть async / await , но он также использует обещания под капотом иЯ не рекомендую пробовать, пока вы не поймете, что такое обещание и как оно работает.

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