0

这是我在这里的第一篇文章。

我在通过 POST 方法发送数据时遇到问题。

控制台向我显示:“跨源请求被阻止:同源策略不允许在https://api.aftership.com/v4/trackings读取远程资源。(原因:CORS 标头 'Access-Control-Allow-Origin'失踪)。”

我阅读了有关 CORS 的信息,但我仍然遇到同样的问题。

这是我的代码:

function track() {
    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'https://api.aftership.com/v4/trackings/', true);
    xhr.setRequestHeader('Content-Type', 'application/json');
    xhr.setRequestHeader('aftership-api-key', 'key');

    xhr.onload = function() {
        if(xhr.status === 200) {
            console.log(' works? : ' + xhr.responseText);
        }
        else {
            console.log('DOESN NOT WORK!' + xhr.status);
        }
    }
    xhr.send("tracking_number=number");
    //xhr.send();
}

有时使用 GET 方法我可以创建跟踪号,但它不能长时间工作。但是在创建它时,我可以在 Google Chrome 上使用带有 CORS 插件的 DELETE 方法。没有插件我不能使用 DELETE 方法。

我会使用 API aftership 为自己编写一个关于 phonegap 的应用程序。

请帮忙!:D

4

2 回答 2

0

您需要更改内容安全策略元标记。

HTML 文件顶部的这一行:

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

可以改成这样:

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

注意 default-src 的变化。使用 * 那里它允许任何流量,因此您可以将其更改为您的特定 URL。

您可以完全删除该元标记。但是,这是不安全的,只能查看这是否会导致您的问题。

在此处阅读有关内容安全策略的部分:

https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-whitelist/

您可能也有白名单问题,但请先尝试。如果需要,我将解释白名单,或者您可以阅读上面的链接。

于 2017-04-20T17:53:14.073 回答
0

添加了元标记和白名单插件

向 config.xml 添加:

<access origin="*" />
<allow-intent href="http://*/" />
<allow-intent href="https://*/*" />

仍然 POST 方法不起作用...

也许通过 PHP 或 node.js 使用 POST 方法更简单?

我需要解决这个问题才能完成我的应用程序:(

于 2017-04-21T15:55:10.900 回答