3

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

4 回答 4

0

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

于 2019-01-18T09:02:37.357 回答
0

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

于 2019-10-31T01:35:17.013 回答
0

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

于 2019-10-28T13:41:05.043 回答
-1

嗨维克曼,欢迎来到 SO。

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

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

首先,我建议您只坚持使用 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我编辑了代码以适应它。

于 2019-01-16T15:30:11.730 回答