【问题标题】:Nativescript-Vue MobileApp: Axios return status:null and data:""Nativescript-Vue MobileApp:Axios 返回状态:null 和数据:“”
【发布时间】:2019-06-10 17:09:36
【问题描述】:

我正在使用 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));
});

【问题讨论】:

  • 如果您不添加要发布的 URL 和/或 BE 代码,我们无法确定问题出在哪里。
  • 感谢 Randy Casburn 的回复!好吧,没有什么特别的原因,我使用 axios 是因为我练习得最多,但是明天我将尝试使用 Nativescript 的 http Api 并且非常感谢您的建议 :) 对于 alert() 我知道这听起来很疯狂但我使用的是真实设备,所以我无法使用 console.log() 这就是我使用 alert() 进行调试的原因,也感谢您的第二个建议 :)
  • 我把我的cmets做成答案的形式给你。

标签: javascript vuejs2 axios nativescript-vue


【解决方案1】:

@RandyCasburn 感谢您的回复 Randy Casburn 先生,我没有从 API 中得到任何错误。 我与一位同事讨论了这个话题,他告诉我,使用您提供给我的代码,API 没有收到请求。他认为这是因为您设置为 application/json 的内容类型,我们的 API 只接受 application/x-www-form-urlencoded,之后我尝试通过将内容类型更改为 application/x-www- form-urlencoded,但我没有得到回应,我不确定是否收到了请求。 我们使用 Express API,使用 axios 进行调用。 我的本机应用程序代码与我的桌面浏览器相同,但我从本机应用程序中删除了它。

【讨论】:

    【解决方案2】:

    如果您在 Android 设备上测试您的 API,请确保您的发布请求返回一些内容(即使它只是一条成功消息)。在 IOS 上不需要,但在 Android 上由于某种原因,如果没有数据返回,请求会返回 Request failed with status code null

    【讨论】:

      【解决方案3】:

      我有同样的问题。我将 axios 版本更新为 0.19.0。问题解决了

      【讨论】:

        【解决方案4】:

        嗨,维克曼,欢迎来到 SO。

        您自己弄糊涂了,因为您试图同时使用来自三个不同平台的三个不同 API。这就是我的意思:

        1. 使用 Axios 处理您的 AJAX 请求
        2. 使用来自 NodeJS 的 querystring 对象
        3. 在 Web 浏览器的 Window 上下文中使用 alert() 函数

        首先,我建议您只坚持使用 NativeScript API,让您的生活更轻松。你不需要 2000 行 Axios 来节省几次击键。 Axios 文档已经说服您必须使用querystring.stringify() 方法将查询参数与您的请求一起传递。不幸的是,querystring 对象是一个 NodeJS 对象,可能在 Android/iOS 运行时中可用,也可能不可用。所以消除 Axios,让您的生活更轻松。

        最后,请确保您使用的代码不是设计用于仅在浏览器中运行(如 alert())或仅在 NodeJS(但不是本机运行时)中运行的代码。

        为确保您发布作品,请使用此处记录的 NativeScript HTTP API:

        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 之后,我编辑了代码以适应它。

        【讨论】:

        • 非常感谢您的回答和您的时间先生!主要是你的方法救了我,我要感谢你,不幸的是,我仍然得到一个空数组作为响应,我不明白为什么,首先我认为这可能是 API 方面的问题,但我现在确定 API 工作正常
        • @Vikman - 需要更多信息。是否从 API 收到错误?什么API?本土、商业、谷歌、AWS?最后,详细描述一下 NativeScript 应用程序中不起作用的代码和起作用的“桌面”代码之间的区别。
        猜你喜欢
        • 2021-02-20
        • 1970-01-01
        • 2017-10-25
        • 1970-01-01
        • 1970-01-01
        • 2019-12-24
        • 2021-10-03
        • 2014-11-27
        • 1970-01-01
        相关资源
        最近更新 更多