为什么jQuery Ajax在Cordova iOS应用程序中不起作用



我正在构建一个Cordova应用程序,该应用程序使用jQuery Ajax将图像上传到我们的服务器。上传在安卓和iOS上都能工作一段时间,但过了一段时间后,它们突然停止了在iOS上的工作。现在,在尝试访问网站几秒钟后,请求失败,我收到了一条错误消息,这并没有多大帮助。错误如下:

readyState: 0
status: 0
statusText: "error"

我的代码是:

$.ajax("http://testapi.com/api", {
data: submission,
processData: false,
contentType: false,
method: "POST",
// submission was successful
success(data) {
if (JSON.parse(data).success) {
// backend validated and accepted submission
} else {
// backend rejected submission due to validation errors
}
},
// submission failed
// eslint-disable-next-line no-unused-vars
error(xhr, text, error) {
alert(
JSON.stringify(xhr) + "  " + text + " " + JSON.stringify(error)
);
}
});

我的内容安全策略,在index.html中是:

<meta http-equiv="Content-Security-Policy" content="default-src * blob: gap://* file: http: https: ; style-src 'self' 'unsafe-inline'; script-src * blob: file: 'unsafe-inline' 'unsafe-eval' http: https: ; img-src 'self' data: blob: file: ; media-src * blob: file:  http: https: ;"

config.xml是:`

<config-file parent="NSCameraUsageDescription" target="*-Info.plist">
<string>World Bee Count needs access to your camera and photo library</string>
</config-file>
<edit-config file="*-Info.plist" overwrite="true" target="NSLocationWhenInUseUsageDescription">
<string>need location access to find things nearby</string>
</edit-config>
<edit-config file="*-Info.plist" overwrite="true" target="NSLocationAlwaysAndWhenInUseUsageDescription">
<string>need location access to find things nearby</string>
</edit-config>
<string file="*-Info.plist" overwrite="true" target="NSLocationAlwaysUsageDescription">
<string>need location access to find things nearby</string>
</string>
<config-file parent="NSPhotoLibraryUsageDescription" target="*-Info.plist">
<string>World Bee Count needs access to your camera and photo library</string>
</config-file>
<preference name="StatusBarOverlaysWebView" value="false" />
<preference name="StatusBarBackgroundColor" value="#2D81C1" />
<preference name="Fullscreen" value="true" />
<feature name="CDVWKWebViewEngine">
<param name="ios-package" value="CDVWKWebViewEngine" />
</feature>
<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />
<preference name="WKWebViewOnly" value="true" />
</platform>
<engine name="ios" spec="5.1.0" />
<plugin name="cordova-plugin-geolocation" />
<plugin name="cordova-plugin-device" />
<plugin name="cordova-plugin-file" />
<plugin name="cordova-plugin-filepath" />
<plugin name="cordova-plugin-whitelist" />
<plugin name="cordova-plugin-add-swift-support" />
<plugin name="com.subitolabs.android.cordova.galleryapi" spec="https://github.com/Collaborne/cordova-gallery-api.git"></plugin>
<plugin name="cordova.plugins.diagnostic" />
<plugin name="cordova-plugin-android-permissions" />
<plugin name="cordova-plugin-splashscreen" source="npm" />
<plugin name="cordova-plugin-camera-preview"></plugin>
<plugin name="cordova-plugin-wkwebview-engine" spec="~1.2.1" />
<plugin name="cordova-plugin-screen-orientation" spec="~3.0.2" />`
<access origin="*" />
<allow-intent href="*" />
<allow-navigation href="*" />

我在iOS 13上运行这个,并使用PhoneGap构建

我的问题与此最相似Ajax无法在IOS9.0 Cordova 中工作

我尝试根据这个问题更新config.xml但似乎不起作用

任何帮助都将不胜感激,我已经为此工作了几个小时,似乎无法取得任何进展

好的,我发现问题是因为最近从UIWebView到WKWebView的更新破坏了Ajax代码。我将cordova插件wkwebview文件xhr插件添加到我的项目中,如文档中所述。我还删除了WKWebView引擎插件的版本规范。我的config.xml被编辑为包括以下内容:

<plugin name="cordova-plugin-wkwebview-engine" />
<plugin name="cordova-plugin-wkwebview-file-xhr" spec="~2.1.4" />

在下

<platform name="ios">
....
<preference name="AllowUntrustedCerts" value="on" />
<preference name="InterceptRemoteRequests" value="all" />
<preference name="NativeXHRLogging" value="full" />

我尝试了各种偏好的组合,但只有这种组合有效。然而,NativeXHRLogging可能会被禁用,因为它似乎并不重要。在这之后,一切又开始工作

我在使用Cordova IOS 6.1.1构建时遇到了同样的问题。

我尝试了上面的解决方案,但在上面提到的-engine中出现了构建错误。

我删除了-engine,只使用了最新的文件xhr,它就工作了。

只需使用以下插件,无论是否使用上述首选项。

<plugin name="cordova-plugin-wkwebview-file-xhr" source="npm" version="3.0.0" /> 

相关内容

最新更新