首页 > 解决方案 > Phonegap AJAX 不适用于 iOS 和 Android

问题描述

我们是一家使用 phonegap 进行早期构建的小公司,但我们遇到了 404 ERROR / CORS。

我正在为我的 API 使用 .Net Framework - 并且 CORS 已完全设置。

所以基本上,当我通过 phonegap 开发工具在我的桌面上启动我的应用程序时,它可以工作,但如果我禁用我的“CORS”扩展它就不会。

但是当我为 IOS 和 Android 构建我的应用程序时,安装过程等正在创造奇迹,但我的问题是我无法让我的应用程序访问 API - 它没有命中 AJAX 调用。

如果我是正确的,我认为手机上不需要 CORS。

注意:我的 API 当前在 HTTP 而不是 HTTPS 上运行。

CSP:(允许一切,但仍然不起作用)

"meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline'; style-src 'self' 'unsafe-inline'; 媒体源*;连接源 *" /"

CONFIG.XML:(我删除了图标、名称和应用程序描述。)

<content src="index.html" />
<preference name="DisallowOverscroll" value="true" />
<preference name="android-minSdkVersion" value="14" />
<plugin name="cordova-plugin-battery-status" source="npm" spec="~1.1.1" />
<plugin name="cordova-plugin-camera" source="npm" spec="~2.1.1" />
<plugin name="cordova-plugin-media-capture" source="npm" spec="~1.2.0" />
<plugin name="cordova-plugin-console" source="npm" spec="~1.0.2" />
<plugin name="cordova-plugin-contacts" source="npm" spec="~2.0.1" />
<plugin name="cordova-plugin-device" source="npm" spec="~1.1.1" />
<plugin name="cordova-plugin-device-motion" source="npm" spec="~1.2.0" />
<plugin name="cordova-plugin-device-orientation" source="npm" spec="~1.0.2" />
<plugin name="cordova-plugin-dialogs" source="npm" spec="~1.2.0" />
<plugin name="cordova-plugin-file" source="npm" spec="~4.1.1" />
<plugin name="cordova-plugin-file-transfer" source="npm" spec="~1.5.0" />
<plugin name="cordova-plugin-geolocation" source="npm" spec="~2.1.0" />
<plugin name="cordova-plugin-globalization" source="npm" spec="~1.0.3" />
<plugin name="cordova-plugin-inappbrowser" source="npm" spec="~1.3.0" />
<plugin name="cordova-plugin-media" source="npm" spec="~2.2.0" />
<plugin name="cordova-plugin-network-information" source="npm" spec="~1.2.0" />
<plugin name="cordova-plugin-splashscreen" source="npm" spec="~3.2.1" />
<plugin name="cordova-plugin-statusbar" source="npm" spec="~2.1.2" />
<plugin name="cordova-plugin-vibration" source="npm" spec="~2.1.0" />
<plugin name="cordova-plugin-whitelist" source="npm" spec="~1.2.1" />

</platform>
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
    <allow-intent href="market:*" />
</platform>
<platform name="ios">
    <allow-intent href="itms:*" />
    <allow-intent href="itms-apps:*" />
</platform>

AJAX 调用:

function Login() {
    var Email = $("#pass").val();
    var Password = $("#bruger").val();

    $.ajax({
        type: 'GET',
        url: 'http://myapiserver.com/' + Email + '/' + Password,
        success: function (data) {
            if (data.ID > 0 && data.Username !== null) {
                console.log("", data.Id);
                console.log("", data.Username);
                window.localStorage.setItem("user", data.Id);
                window.localStorage.setItem("namefield", data.Username);
                window.location.assign("main.html");

            } else {
                $("#msg").html("<span style=\"color: black;\" class=\"alert\">Brugeren blev ikke fundet!</span>"); 
            }
        }
    });

        if (window.localStorage.getItem("user")!== null) {
            window.location.assign("main.html");
        }

}

我一直在阅读有关导致错误的 WebView 的内容,但是由于 IOS 也失败了,我认为这不是原因,它也应该在最新的 WebView 补丁中解决。

我可能需要更新一些 SDK 或其他东西,但由于我使用 Phonegap 工具创建应用程序,所以我不知道该怎么做。(可能需要一些帮助)

整个应用程序都在浏览器中运行,并且在 IOS 和 Andoid 上运行时“完成”——但我真的需要尽快解决这个问题,因为我们将在一周内召开投资者会议。

我真的希望有人知道这里发生了什么 - 在此先感谢!

标签: jqueryajaxcordovacorsphonegap

解决方案


您绝对必须在 myapiserver.com 上实现 HTTPS,即使是为了开发。iPhone 通过 PhoneGap API 尤其会在外部 URL 不通过 HTTPS 时阻止请求。我构建了一个 PhoneGap 应用程序来解决这个问题。您可以尝试将其添加到允许的 URL,但 Apple 只会在它不使用 HTTPS 且没有真正错误原因的情况下阻止它。您需要将 SSL 添加到该 Web 服务的开发和生产服务器 URL。我假设Android已经跟随套件。


推荐阅读