【问题标题】:Can't connect with server in Phonegap App by CORS request error由于 CORS 请求错误,无法连接 Phonegap App 中的服务器
【发布时间】:2020-03-30 18:46:51
【问题描述】:

我已经创建了我的应用程序。当我在桌面上测试或在 PhoneGap IDE 上运行时,它运行正常并与服务器连接,但是当我构建我的 apk 并在 Android 上运行它时,请求失败并启动此消息:

请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'http://localhost'。

这是我的 XMLHttpRequest:

sendPost: function(url, data, callback){

        var loading = document.getElementById('loading');
        loading.innerHTML = '<p></p>';
        loading.classList.add('loading_active');

        var params = '';
        var count = Object.keys(data).length;
        for(var i=0; i<count;i++){
            if(i>0){
            params += '&';
            }
            params += Object.keys(data)[i] + '=' + Object.values(data)[i];
        }

        var xhr = new XMLHttpRequest();
        xhr.open('POST', url, true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                var res = JSON.parse(xhr.responseText);
                if(callback){
                    callback(res);
                }
            }
        };
        xhr.send(params);
    },

我这样称呼它:

app.sendPost(url,data,function(res){
    some code.....
    }); // end app.sendPost()

我已经在 htaccess 文件中包含了这一行:

Header set Access-Control-Allow-Origin "*"

但服务器不允许来自 Phonegap (localhost) 的请求

【问题讨论】:

    标签: javascript ajax .htaccess xmlhttprequest phonegap


    【解决方案1】:

    你应该看看这篇文章:

    Enable cors in htaccess

    使用 PHP 设置标头应该可以解决问题(如果您使用的是 PHP 服务器端)

    【讨论】:

    • 嗨,我试试这个,但现在我收到了这条消息:The 'Access-Control-Allow-Origin' header contains multiple values 'null, *', but only one is allowed. Origin 'null' is therefore not allowed access.
    • 能否贴出你正在使用的header函数。
    • 当然。我删除 htaccess 行并在我的 PHP 文件中包含此代码: ` // Access-Control headers are received during OPTIONS requests if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD '])) header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); } `
    • 你能用这些行代替你的 sn-p 吗: header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS"); header('Access-Control-Allow-Origin: *');
    • 同样的事情:(我不知道还能做什么......当我在Phonegap上测试我的项目时,它工作正常:问题是当我构建我的应用程序并测试apk时我的手机
    【解决方案2】:

    解决了!!问题是我必须在 config.xml phonegap 文件中包含一个白名单:

    正如我之前解释的那样,问题仅在我运行构建项目 phonegap apk 时发生(在开发模式下运行正常)所以我只是在 config.xml 文件中包含了一个白名单,它可以工作。

    在您的 config.xml 文件中包含以下行: ''' '''

    【讨论】:

      猜你喜欢
      • 2016-03-13
      • 2013-08-13
      • 2014-01-31
      • 2020-05-11
      • 1970-01-01
      • 2020-11-11
      • 2017-10-23
      • 2019-10-08
      • 1970-01-01
      相关资源
      最近更新 更多