Я делаю запрос на выборку в javascript. Он извлекает данные, когда я запускаю консоль, она показывает мне данные. но когда Я пытаюсь предупредить его, а затем функция отображается пустой. он сразу показывает предупреждение при загрузке страницы. Я думаю, что это предупреждение перед ответом на запрос
Вот мой код javascript
fetch("https://01b4e41e6262.ngrok.io/api/get_schedule_orders/" + gUser.getData().id).then(res => {
if (res.ok) {
alert(res)
}
});
Отвечает ли это на ваш вопрос? Как вернуть ответ при асинхронном вызове?
Отвечает ли это на ваш вопрос? Чистый метод fetch() Javascript для сервлета Java, как я могу получить и передать данные?
есть много, много, много вопросов Stack Overflow о том, как получить доступ к данным в ответ на fetch
. какие из них вы исследовали и почему они не решили вашу конкретную проблему?
fetch()
изначально возвращает Promise
, поэтому res изначально является обещанием, либо разрешенным, либо отклоненным.
Затем res.json()
снова возвращает промис, а не значение напрямую (вы можете проверить это, выполнив console.info(res)
в первом then()
, там в прототипе вы увидите json()
, который снова основан на промисе.
Вот почему мы связываем обещания, выполняя return res.json()
, и получаем наши данные во втором разрешении обещания, а в случае отклонения вызывается обратный вызов catch()
.
fetch("https://01b4e41e6262.ngrok.io/api/get_schedule_orders/" + gUser.getData().id).then(res => {
if (res.status>=200 && res.status <300) {
return res.json()
}else{
throw new Error();
}
}).then(data=>console.info(data))
.catch(err=>console.info('fetch() failed'))
ОБНОВЛЕНИЕ: ваш API возвращает пустой массив.
Пожалуйста, проверьте параметры API.
@Bilal arshad: приведенный выше код также обрабатывает вашу ошибку и прекрасно работает во всех сценариях. Оцените ответ. Спасибо :) Боже, благослови и счастливого кодирования
Я пытаюсь это, но не работает fetch("https://01b4e41e6262.ngrok.io/api/get_schedule_orders/" + gUser.getData().id).then(res => { if (res.status===200) { return res.json(); } }).then(data=> { $scope.schedule_orders = data.data; alert(JSON.stringify(data.json())) });
Проверьте, нормально ли работает API. Попробуйте console.info() в блоке catch(). А пока посмотрю в чем может быть проблема :)
Я проверил это, ваш API фактически возвращает пустой массив. С кодом все в порядке.
в разделе предварительного просмотра я вижу, что 0: {id: 10, devy_user_id: 129731,…} created_at: null data: "{"paymethod_id":1,"business_id":76,"delivery_type":"1","driver_tip":0,"delivery_zone_id":6569,"delivery_datetime":null,"location":RPM\"},\"tag\":\"home\"}"}" devy_user_id: 129731 id: 10 schedule_date: "2020-12-12 21:06:00" updated_at: null
хм. Я понимаю. Кажется, я понял это, дорогой брат. Позвольте мне отладить.
Замена этого gUser.getData().id значением devy_user_id в URL-адресе возвращает массив со значениями. Смотрите jsfiddle jsfiddle.net/mvjy9e4a. Вам нужно только правильно определить параметр вашего запроса, и он будет работать нормально, т. Е. Последняя часть URL-адреса.
Давайте продолжим обсуждение в чате.
Дайте мне знать, работает ли он сейчас нормально :) Оценивайте и принимайте, если вы узнали что-то новое. Для других, чтобы также извлечь выгоду из :) Спасибо
Fetch API инициирует цепочку из двух Promises
.
.text()
, .json()
и т. д.)Пример (с использованием синтаксиса async / await
):
const getScheduleOrders = async (gUser) => {
const response = await fetch('https://01b4e41e6262.ngrok.io/api/get_schedule_orders/' + gUser.getData().id);
const scheduleOrder = await response.text();
await window.alert(scheduleOrder);
}
Вы должны конвертировать в
res.json
илиres.text
, чтобы получить контент из ответа.