Nativescript-Vue MobileApp: Axios возвращает статус: ноль и данные:""

Я делаю нативное приложение, используя Nativescript-Vue, в моем первом компоненте я запускаю простой пост-запрос, который работает точно (я тестировал его на настольной версии). Но по причине, которую я игнорирую, есть проблема с ответом. Мой ответ показывает, что запрос был успешно отправлен по параметрам, но я получаю статус:null и данные:"". Кто-нибудь из вас знает, как я могу это исправить?

Любому человеку, который читает эту тему, спасибо за потраченное время. Любое руководство было бы заметно:)

axios({
method: 'post',
url: url,
data: querystring.stringify({
grant_type: config.grant_type,
username: config.API_username,
password: config.API_password,
APIKeys: config.API_key
}),
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then((response) => {
alert(JSON.stringify(response, null, 4));

})
.catch((error) => {
alert(JSON.stringify(error, null, 4));
});

2 ответа

Я была такая же проблема. Я обновил версию axios до 0.19.0. Задача решена

@RandyCasburn Спасибо за ваш ответ, мистер Рэнди Кэсберн, я не получил никаких ошибок от API. Я обсуждаю эту тему с коллегой, и он сказал мне, что с кодом, который вы мне предоставили, API не получает запрос. Он думает, что это из-за типа контента, который вы указали для application/json, наш API принимает только application/x-www-form-urlencoded, после этого я попробовал ваш путь, изменив тип контента на application / x-www- форма-urlencoded, но я не получил ответа, и я не уверен, что запрос был получен. Мы используем Express API, звонки осуществляются с помощью axios. Мой код для моего нативного приложения такой же, как и для моего браузера, но я удалил его из нативного приложения

Если вы тестируете свой API на устройстве Android, убедитесь, что ваш почтовый запрос что-то возвращает (даже если это просто сообщение об успехе). В IOS это не нужно, но по какой-то причине на Android, если данные не возвращаются, запрос возвращаетсяRequest failed with status code null.

Привет Викман и добро пожаловать в ТАК.

Вы запутались, потому что пытаетесь использовать три разных API с трех разных платформ одновременно. Это то, что я имею в виду:

  1. Использование Axios для вашего запроса AJAX
  2. С использованием querystring объект от NodeJS
  3. С использованием alert() функция из контекста окна веб-браузера

Во-первых, я рекомендую сделать вашу жизнь проще, придерживаясь исключительно API-интерфейсов NativeScript. Вам не нужно 2000 строк Axios, чтобы сохранить несколько нажатий клавиш. Документация Axios убедила вас, что вы должны использовать querystring.stringify() метод для передачи параметров запроса вместе с вашим запросом. К сожалению, querystring Объект является объектом NodeJS и может или не может быть доступен во время выполнения Android/iOS. Так что устраните Axios и сделайте вашу жизнь проще.

Наконец, убедитесь, что вы не используете код, предназначенный для работы только в браузере (например, alert()) или только в NodeJS (но не в собственных средах выполнения).

Чтобы убедиться, что вы публикуете работы, используйте HTTP-API NativeScript, который описан здесь:

https://docs.nativescript.org/ns-framework-modules/http

Измените свой код на это:

const httpModule = require("http");
const dialogs = require("tns-core-modules/ui/dialogs");

httpModule.request({
    url: url,
    method: "POST",
    headers: { "Content-Type": "application/json" },
    content: JSON.stringify({
        grant_type: config.grant_type,
        username: config.API_username,
        password: config.API_password,
        APIKeys: config.API_key
      })
}).then((response) => {
    const result = response.content.toJSON();
    dialogs.alert(result);
}, (e) => {
    dialogs.alert(JSON.stringify(e));
});

Это будет работать в вашей среде NativeScript.

РЕДАКТИРОВАТЬ: после прочтения вашего комментария об устройстве и alert Я отредактировал код, чтобы учесть это.

Другие вопросы по тегам