首页 > 解决方案 > Cordova:无法在“XMLHttpRequest”上执行“发送”

问题描述

我正在尝试恢复我的 Cordova 应用程序,因为上次它工作时我的服务器已过期,我不得不重建数据库并加载我的 php 接口,但它与以前托管的域不同。

因此,在服务器上的所有工作都完成并且一切正常之后,我更改了我的应用程序中的所有链接以及对外部源的权限,但是当我运行应用程序时,当它遇到第一个 getJSON 调用时,它会给出以下错误在 JavaScript 控制台上:

无法加载资源jquery-3.2.1.js (9566,10)

在输出流上它说:

E chromium: [ERROR:sync_resource_handler.cc(63)] 跨域重定向被拒绝

我添加了以下错误函数以更好地了解错误:

console.log(xhr.status + status + error);

并在控制台上得到了这个:

0errorNetworkError:无法在“XMLHttpRequest”上执行“发送”:无法加载“ https://www.squirreldevelopment.it/notebet/request_utilities.php ”。

我在我的 config.xml 中安装了白名单插件和以下内容:

<plugin name="cordova-plugin-whitelist" spec="~1.3.3" />
<allow-navigation href="https://squirreldevelopment.it/notebet/*" />
<allow-intent href="https://squirreldevelopment.it/notebet/*" />
<access origin="https://squirreldevelopment.it/notebet/*" />

我也尝试了 href="*" 但没有成功。

在我的 html 头中

    <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src *; connect-src 'self' https://www.squirreldevelopment.it/notebet/ 'unsafe-inline' 'unsafe-eval'">

在 php 文件的顶部,我有:

<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET');
header('Content-Type: application/json');
header('HTTP/1.1 200 OK');

我检查了生成的清单,并且有访问互联网的权限

我确实尝试重新安装白名单插件但没有成功。

这是我进行调用的原始代码:

        $.getJSON('https://www.squirreldevelopment.it/notebet/request_request_utilities.php', function (result) {
        console.log("success");
        $.each(result, function (i, field) {
            console.log("reading request_utilities.php");
            status = field.status;
            val_aggiorna = field.aggiorna;
            console.log("ended reading request_utilities.php");
            statusResult = result;
        });
        if (status == 0) {
            errore('Error loading data');
        } else {
            console.log("status ok");
            console.log("requestData");
            requestData(urls);
        }
    });

这是我现在用来调试的代码(它们得到相同的错误):

        $.ajax({
        crossDomain:true,
        dataType: "json",
        url: "https://www.squirreldevelopment.it/notebet/request_utilities.php",
        success: function (result) {
                    console.log("success");
                    $.each(result, function (i, field) {
                        console.log("reading request_utilities.php");
                        status = field.status;
                        val_aggiorna = field.aggiorna;
                        console.log("ended reading request_utilities.php");
                        statusResult = result;
                    });
                    if (status == 0) {
                        errore('Error loading data');
                    } else {
                        console.log("status ok");
                        console.log("requestData");
                        requestData(urls);
                    }
        },
        error: function (xhr, status, error) {
                    console.log(xhr.status + status + error);
              }
    });

我没有更多关于如何解决这个问题的线索。希望有人可以提供帮助。

标签: ajaxcordovacross-domaingetjsonwhitelist

解决方案


请尝试 CSP,例如:

<meta http-equiv="Content-Security-Policy" 
      content="
                default-src 'self' data: gap:; 
                connect-src 'self' https://www.squirreldevelopment.it;
                script-src 'self' data: https://ssl.gstatic.com 'unsafe-eval' 'unsafe-inline';
                style-src 'self' 'unsafe-inline'; 
                media-src *; 
                ">

我将从 config.xml 设置开始,例如:

 <access allows-arbitrary-loads-for-media="true" allows-arbitrary-loads-in-web-content="true" allows-local-networking="true" origin="*"/>
 <allow-intent href="http://*/*"/>
 <allow-intent href="https://*/*"/>
 <allow-navigation href="*"/>

如果你让它根据你的需要工作狭窄的访问。


推荐阅读