Android Phonegap-App在Ajax-Request上投掷404



我将我的PhoneGap 4.x应用程序更新为PhoneGap 6.4,而我的Ajax功能则破裂了。我总是得到404。

当然,我迅速绊倒了许多其他帖子。

花了几天后尝试我在这里找到的所有内容,在其他网站上我决定创建一个新项目,并在此空白 config.xml 中重新配置所有内容,并且仅复制的内容www/。但即使那也没有帮助。

来自同一域的嵌入式图像正常加载,但是我的Ajax请求(使用jQuery)失败。

我在做什么错?我完全错过了什么吗?


这是我的 config.xml

<?xml version='1.0' encoding='utf-8'?>
<widget id="..." version="..." xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
    <name>...</name>
    <description>
        ...
    </description>
    <author email="..." href="...">
        ...
    </author>
    <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 name="android">
        <icon density="ldpi" src="www/res/icon/android/icon-ldpi.png" />
        <icon density="mdpi" src="www/res/icon/android/icon-mdpi.png" />
        <icon density="hdpi" src="www/res/icon/android/icon-hdpi.png" />
        <icon density="xhdpi" src="www/res/icon/android/icon-xhdpi.png" />
        <splash density="port-ldpi" src="www/res/screen/android/screen-ldpi-portrait.png" />
        <splash density="port-mdpi" src="www/res/screen/android/screen-mdpi-portrait.png" />
        <splash density="port-hdpi" src="www/res/screen/android/screen-hdpi-portrait.png" />
        <splash density="port-xhdpi" src="www/res/screen/android/screen-xhdpi-portrait.png" />
    </platform>
    <access origin="*" />
    <allow-navigation href="https://www.XYZ.de/*" />
    <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:*" />
        <allow-intent href="*" />
        <allow-navigation href="*" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    </platform>
</widget>

ajax请求的jQuery代码:

$.ajax( url, {
    dataType: 'jsonp',
    success: function(data) {
        var json = data;
        concerts = [];
        for( var i=0; i<json.events.length; i++ ) {
            var concert = json.events[i];
            concerts.push( concert );
        }
        window.localStorage.removeItem( 'concerts' );
        window.localStorage.setItem( 'concerts', JSON.stringify(concerts) );
        if( concerts.length > 0 || json.events.length == 0 ) {
            hideLoadingAlert();
            concertsLoaded = true;
            if( waitingForConcertData ) {
                if( waitingForConcertData == 'buildConcertList' )
                    buildConcertList();
                if( waitingForConcertData == 'buildFavoritesList' )
                    buildFavoritesList();
            }
        }
        else {
            initConcerts();
            return;
        }
    },
    error: function(xhr) {
        alert(JSON.stringify(xhr));
        alert(url);
        setTimeout("initConcerts()", 5000);
    }
} );

最后我找到了"错误":

在Android上WebView/App/PhoneGap似乎对Mime-types非常严格:

在Chrome(@desktop)中运行我的应用程序时,我在控制台中发现了此错误:

拒绝执行脚本 'https://www.xyz.de/api.php/json/news?callback=jquery2100273875593823' 因为它的哑剧类型("文本/json")不可执行,并且严格的哑剧 启用了类型检查。

当然,对于JSONP而言,正确的Mime型将是 application/javascript ,因为它被用作JavaScript函数。

和yep-现在它也在Android上。

最新更新