Javascript Nativescript Vue MobileApp:Axios返回状态:null,数据:“0”&引用;

Javascript Nativescript Vue MobileApp:Axios返回状态:null,数据:“0”&引用;,javascript,vuejs2,axios,nativescript-vue,Javascript,Vuejs2,Axios,Nativescript Vue,我正在使用Nativescript Vue制作一个本机应用程序,在我的第一个组件中,我启动了一个简单的post请求,它肯定能工作(我在桌面版本上测试了它)。但由于我忽略的一个原因,我的回答有一个问题。我的响应向我显示请求已成功发送参数,但我得到的状态为null,数据为:“”。你们中的一些人知道我如何解决这个问题吗 对于正在阅读本主题的任何人,感谢您抽出时间,任何线索都是值得欣赏的:) 嗨,维克曼,欢迎来到SO 因为您试图同时使用来自三个不同平台的三个不同API,所以您感到困惑。这就是我的意思:

我正在使用Nativescript Vue制作一个本机应用程序,在我的第一个组件中,我启动了一个简单的post请求,它肯定能工作(我在桌面版本上测试了它)。但由于我忽略的一个原因,我的回答有一个问题。我的响应向我显示请求已成功发送参数,但我得到的状态为null,数据为:“”。你们中的一些人知道我如何解决这个问题吗

对于正在阅读本主题的任何人,感谢您抽出时间,任何线索都是值得欣赏的:)


嗨,维克曼,欢迎来到SO

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

  • 在AJAX请求中使用Axios
  • 使用NodeJS中的
    querystring
    对象
  • 从web浏览器的窗口上下文中使用
    alert()
    函数
  • 首先,我建议您只使用NativeScript API,从而使您的生活更加轻松。您不需要使用2000行Axios来保存一些按键。Axios文档使您确信必须使用
    querystring.stringify()
    方法在请求时传递查询参数。不幸的是,
    querystring
    对象是一个NodeJS对象,在Android/iOS运行时中可能可用,也可能不可用。因此,消除Axios,让您的生活更轻松

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

    为确保发布工作正常,请使用此处介绍的NativeScript HTTP API:

    将代码更改为:

    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环境中工作


    编辑:在阅读了您关于设备和警报的评论后,我编辑了代码以适应这种情况。

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

    如果您正在android设备上测试API,请确保您的post请求返回一些内容(即使只是一条成功消息)。在IOS上不需要它,但由于某些原因,在Android上如果没有数据返回,请求返回
    请求失败,状态代码为null

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

    如果您不添加您发布的URL和/或BE代码,我们无法确定问题所在。感谢Randy Casburn的回复!没有什么特别的原因,我使用axios是因为我练习得最多,但明天我将尝试使用Nativescript和thnak提供的http Api,非常感谢您的建议:)对于alert(),我知道这听起来很疯狂,但我使用的是真正的设备,所以我无法控制台.log(),这就是我使用alert()进行调试的原因,同时也感谢你的第二个建议:)我把我的评论变成了对你的回答。非常感谢你的回答和你的时间,先生!主要是您的方法救了我,我想感谢您,不幸的是,我仍然得到一个空数组作为响应,我不明白为什么,首先我认为这可能是API方面的一个问题,但我现在确定API正在工作properly@Vikman-需要更多信息。是否收到来自API的错误?什么API?本土、商业、谷歌、AWS?最后,详细描述NativeScript应用程序中不工作的代码与“桌面”代码之间的差异。
    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));
    });