Я пытаюсь получить данные о высоте с api.opentopodata.org, но у меня есть некоторые проблемы: вот мой код

let dataSEND = {
    "locations":
    [
      {
       "latitude": lat,
       "longitude": lon
      }
    ]

  };



 const elev_response = await fetch('https://api.opentopodata.org/v1/gebco2020',{ 
 method: 'POST',
 headers:{
    'content-type': 'application/json'
  },
  body: JSON.stringify(dataSEND),

 });

И я получаю эту ошибку

Доступ к выборке на «https://api.opentopodata.org/v1/gebco2020» из источника «null» заблокирован политикой CORS: ответ на предварительный запрос не проходит проверку контроля доступа: нет «Access-Control-Allow». Заголовок -Origin присутствует на запрошенном ресурсе. Если непрозрачный ответ соответствует вашим потребностям, установите для режима запроса значение «no-cors», чтобы получить ресурс с отключенным CORS.

Итак, отключение CORS

 const elev_response = await fetch('https://api.opentopodata.org/v1/gebco2020',{ 
 method: 'POST',
 headers:{
    'content-type': 'application/json'
  },
  body: JSON.stringify(dataSEND),
  mode: 'no-cors'
 });

Я получаю другую ошибку Не удалось загрузить ресурс: сервер ответил со статусом 400 ()

"error": "Местоположения не указаны. Добавьте местоположения в строку запроса: ?locations=lat1,lon1|lat2,lon2.", "status": "INVALID_REQUEST" }

Так как часть тела не была отправлена

API как curl работает хорошо https://api.opentopodata.org/v1/gebco2020?locations=10, 10 я получил

    {
"results": [
{
"dataset": "gebco2020",
"elevation": 515,
"location": {
"lat": 10,
"lng": 10
}
}
],
"status": "OK"
}
   

Немного помощи, пожалуйста :)

-1
gmv 27 Ноя 2022 в 06:35
Проблема CORS заключается в том, что вы отправляете это со страницы, загруженной file:///, поэтому запросы на перекрестное происхождение не будут работать
 – 
Jaromanda X
27 Ноя 2022 в 06:39
Хорошо, но отключив CORS, я получаю еще одну ошибку
 – 
gmv
27 Ноя 2022 в 06:45
1
Нет такой вещи, как отключение CORS — CORS — это функция на стороне сервера, чтобы контролировать, что клиенты могут или не могут получить
 – 
Jaromanda X
27 Ноя 2022 в 06:59

1 ответ

Используя документацию, я проверил запрос, это GET, используя параметры запроса.

https://www.opentopodata.org/datasets/gebco2020/

Тогда вам нужно сделать что-то вроде этого:

await fetch('https://api.opentopodata.org/v1/gebco2020?locations=37.6535,-119.4105').then((response) => response.json()).then((data) => console.log(data))
0
Jean-Pierre Carvalho 27 Ноя 2022 в 07:35