Nativescript-Vue MobileApp: Axios возвращает статус: ноль и данные: "" - PullRequest
0 голосов
/ 16 января 2019

Я делаю нативное приложение, используя 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 ]

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

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

0 голосов
/ 16 января 2019

Привет, Викман, и добро пожаловать в SO.

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

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

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

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

Чтобы обеспечить публикацию работ, используйте API-интерфейс HTTP 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 я отредактировал код, чтобы учесть это.

...