3
votes

Nativescript-Vue MobileApp: état de retour d'Axios: nul et données: ""

Je crée une application native en utilisant Nativescript-Vue, dans mon premier composant je lance une simple demande de publication, qui fonctionne à coup sûr (je l'ai testé sur la version de bureau). Mais pour une raison que j'ignore, il y a un problème avec la réponse. Ma réponse me montre que la demande a été envoyée avec succès les paramètres, mais j'obtiens un statut: null et une donnée: "". Certains d'entre vous savent-ils comment je peux résoudre ce problème?

À toute personne qui lit ce sujet, merci pour votre temps, tout prospect serait appréciable :)

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));
});


3 commentaires

Nous ne pouvons pas savoir avec certitude quels sont les problèmes si vous n'ajoutez pas l'URL et / ou le code BE sur lequel vous publiez.


Merci Randy Casburn pour votre réponse! Eh bien, il n'y a pas de raison particulière, j'utilise axios car je l'ai le plus pratiqué, mais demain je vais essayer avec l'API http de Nativescript et je vous remercie vraiment beaucoup pour les conseils :) Et pour l'alerte () je sais que cela semble fou mais j'utilise un vrai appareil, donc je ne peux pas console.log () c'est pourquoi j'utilisais alert () pour le débogage, et merci aussi pour ce deuxième conseil :)


Je mets mes commentaires sous forme de réponse pour vous.


4 Réponses :


-1
votes

Bonjour Vikman et bienvenue dans SO.

Vous vous êtes confus parce que vous essayez d'utiliser simultanément trois API différentes de trois plates-formes différentes. Voici ce que je veux dire:

  1. Utilisation d'Axios pour votre requête AJAX
  2. Utilisation de l'objet querystring de NodeJS
  3. Utilisation de la fonction alert () depuis le contexte de fenêtre d'un navigateur Web

Premièrement, je vous recommande de vous simplifier la vie en vous en tenant uniquement aux API NativeScript. Vous n'avez pas besoin de 2000 lignes d'Axios pour enregistrer quelques frappes. La documentation Axios vous a convaincu que vous devez utiliser la méthode querystring.stringify () pour transmettre les paramètres de requête avec votre requête. Malheureusement, l'objet querystring est un objet NodeJS et peut ou non être disponible dans les environnements d'exécution Android / iOS. Alors éliminez Axios et simplifiez-vous la vie.

Enfin, assurez-vous que vous n'utilisez pas de code conçu pour fonctionner uniquement dans le navigateur (comme alert () ) ou uniquement dans NodeJS (mais pas les environnements d'exécution natifs).

Pour vous assurer que la publication fonctionne, utilisez l'API HTTP NativeScript qui est documentée ici:

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

Changez votre code à ceci:

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));
});

Cela fonctionnera dans votre environnement NativeScript.

EDIT: Après avoir lu votre commentaire sur l'appareil et l ' alerte code> J'ai modifié le code pour l'adapter.


2 commentaires

Merci beaucoup pour vos réponses et votre temps monsieur! Principalement vos méthodes m'ont sauvé et je tiens à vous remercier, malheureusement je reçois toujours un tableau vide en réponse et je ne comprends pas pourquoi, tout d'abord j'ai pensé que cela pourrait être un problème côté API mais je savoir maintenant avec certitude que l'API fonctionne correctement


@Vikman - besoin de plus d'informations. Des erreurs sont-elles reçues de l'API? Quelle API? Homegrown, commercial, Google, AWS? Enfin, décrivez en détail les différences entre le code de votre application NativeScript qui ne fonctionne pas et le code «Desktop» qui fonctionne.



0
votes

@RandyCasburn Merci pour votre réponse M. Randy Casburn, je n'ai reçu aucune erreur de l'API. J'ai discuté de ce sujet avec un collègue et il m'a dit qu'avec le code que vous m'avez fourni, l'API ne reçoit pas la demande. Il pense que c'est à cause du type de contenu que vous avez défini sur application / json, notre API n'accepte que application / x-www-form-urlencoded, après cela j'ai essayé votre chemin en changeant le type de contenu en application / x-www- form-urlencoded, mais je n'ai reçu aucune réponse et je ne suis pas sûr que la demande ait été reçue. Nous utilisons une API Express, les appels se font avec axios. Mon code pour mon application native est le même pour mon navigateur de bureau, mais je l'ai supprimé de mon application native.


0 commentaires

0
votes

Si vous testez votre API sur un appareil Android, assurez-vous que votre demande de publication renvoie quelque chose (même s'il ne s'agit que d'un message de réussite). Sur IOS, ce n'est pas nécessaire, mais pour une raison quelconque sur Android, si aucune donnée n'est renvoyée, la demande renvoie La demande a échoué avec le code d'état nul .


0 commentaires

0
votes

J'ai eu le même problème. J'ai mis à jour la version axios vers 0.19.0 . Problème résolu


0 commentaires