我曾尝试过这样的问题,买不到真正的答案,现在已经挣扎了一个多月。
我无法让我的ajax调用工作在为Windows 10 UWP构建的Ionic 3 Cordova应用程序上。他们可以访问localhost,但不能访问任何外部连接。
该应用程序适用于Android和iOS。
我正在尝试在我的开发机器上本地测试它。我使用证书(已购买)签署应用程序,安装此证书,构建Windows应用程序,并能够打开构建的CordovaApp.Windows10_1.0.1.1_x86.appxupload
,然后双击嵌入的CordovaApp.Windows10_1.0.1.1_x86.appx
文件进行安装,成功完成。安装表明该应用需要访问互联网。
在config.xml
中,我有其他标签,如其他地方所建议的那样......
<allow-navigation href="*" />
<access origin="*" />
但是,当我运行时,http.get调用只返回0
而没有其他信息。我可以在Visual Studio中运行,查看返回的错误对象,除了0
返回之外没有其他信息。
我已经运行了fiddler,按照here的说明启用了https解密,但我在响应头中看到的只是
HTTP/1.0 200 Connection Established
FiddlerGateway: Direct
StartTime: 13:44:21.686
Connection: close
主视图中的结果实际显示200
,所以我认为这并没有向我显示任何真实内容。
我完全失败了。我没有其他地方可以搜索。我能错过什么?
我是否可以在Windows 10计算机上使用外部ajax,当我在此处侧载应用程序时?我还没有在商店试过,因为我不想上传,直到我知道它有效。
任何建议都受到了极大的欢迎。当然有人有一个Ionic 3应用程序访问外部ajax吗?
提前感谢您提供任何帮助
[更新1]
如果我在同一台机器上运行应用程序,只使用Ionic服务器(因此它只是在浏览器中运行而不是在UWP中托管),ajax调用也可以正常工作。
[更新2]
我现在使用Visual Studio模板创建了一个Cordova应用程序,因此将所有其他框架排除在等式之外。
我使用vanilla JavaScript来休息...
document.addEventListener('deviceready', callUrl, false);
function callUrl() {
console.log('callUrl');
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://myserveraddress.com/myapp/testroute');
xhr.send(null);
xhr.onreadystatechange = function () {
var DONE = 4; // readyState 4 means the request is done.
var OK = 200; // status 200 is a successful return.
if (xhr.readyState === DONE) {
if (xhr.status === OK)
console.log(xhr.responseText);
} else {
console.log('Error: ' + xhr.status);
}
}
};
我在调试器中运行它,即使在这里我收到错误(状态代码为0)。
当我打开构建包并查看cordova_plugins.js
文件时,我注意到了另一件事。
我的Ionic应用程序有以下内容......
cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
{
"id": "cordova-plugin-console.logger",
"file": "plugins/cordova-plugin-console/www/logger.js",
"pluginId": "cordova-plugin-console",
"clobbers": [
"cordova.logger"
]
},
{
"id": "cordova-plugin-console.console",
"file": "plugins/cordova-plugin-console/www/console-via-logger.js",
"pluginId": "cordova-plugin-console",
"clobbers": [
"console"
]
},
{
"id": "cordova-plugin-device.device",
"file": "plugins/cordova-plugin-device/www/device.js",
"pluginId": "cordova-plugin-device",
"clobbers": [
"device"
]
},
{
"id": "cordova-plugin-device.DeviceProxy",
"file": "plugins/cordova-plugin-device/src/windows/DeviceProxy.js",
"pluginId": "cordova-plugin-device",
"merges": [
""
]
},
{
"id": "cordova-plugin-splashscreen.SplashScreen",
"file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js",
"pluginId": "cordova-plugin-splashscreen",
"clobbers": [
"navigator.splashscreen"
]
},
{
"id": "cordova-plugin-splashscreen.SplashScreenProxy",
"file": "plugins/cordova-plugin-splashscreen/www/windows/SplashScreenProxy.js",
"pluginId": "cordova-plugin-splashscreen",
"runs": true
},
{
"id": "cordova-plugin-statusbar.statusbar",
"file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
"pluginId": "cordova-plugin-statusbar",
"clobbers": [
"window.StatusBar"
]
},
{
"id": "cordova-plugin-statusbar.StatusBarProxy",
"file": "plugins/cordova-plugin-statusbar/src/windows/StatusBarProxy.js",
"pluginId": "cordova-plugin-statusbar",
"runs": true
},
{
"id": "ionic-plugin-keyboard.KeyboardProxy",
"file": "plugins/ionic-plugin-keyboard/src/windows/KeyboardProxy.js",
"pluginId": "ionic-plugin-keyboard",
"clobbers": [
"cordova.plugins.Keyboard"
],
"runs": true
}
];
module.exports.metadata =
// TOP OF METADATA
{
"cordova-plugin-console": "1.0.5",
"cordova-plugin-device": "1.1.4",
"cordova-plugin-splashscreen": "4.0.3",
"cordova-plugin-statusbar": "2.2.2",
"cordova-plugin-whitelist": "1.3.1",
"ionic-plugin-keyboard": "2.2.1"
};
// BOTTOM OF METADATA
});
现在,我注意到module.exports.metadata
中的每个插件在[{1}}除了module.exports
外都有一个条目!
如果我为在VS中创建的Corvoda应用程序打开相同的文件,我会看到以下内容......
cordova-plugin-whitelist
因此白名单插件也没有其他内容
这里有什么东西不见了?这个白名单插件是不是可以正确安装?
答案 0 :(得分:0)
我有类似的情况,我的ajax调用在TEST中工作正常,但当我转移到PROD时,他们会失败。
答案最终被追踪为我试图访问的服务器上缺少的中间证书。 TEST有证书,PROD没有。
我希望这会有所帮助。