Nativescript-Vue MobileApp:Axios返回状态:空和数据:“”

时间:2019-01-16 15:11:33

标签: javascript vuejs2 axios nativescript-vue

我正在使用Nativescript-Vue制作本机应用程序,在我的第一个组件中,我启动了一个简单的发布请求,该请求可以正常工作(我在桌面版本上进行了测试)。但是出于我忽略的原因,响应存在问题。我的答复显示,请求已成功发送参数,但是我收到了status:null和data:“”。你们中有些人知道我该如何解决吗?

对于正在阅读本主题的任何人,谢谢您的时间,任何潜在的线索都是可观的:)

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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

您好,Vikman,欢迎来到SO。

您一直感到困惑,因为您试图同时使用来自三个不同平台的三个不同API。这就是我的意思:

  1. 使用Axios进行AJAX请求
  2. 使用NodeJS中的querystring对象
  3. 在网络浏览器的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的评论后,我编辑了代码以适应这种情况。

相关问题