ship.com CORS JavaScript Ajax之后的API

ship.com CORS JavaScript Ajax之后的API,javascript,ajax,cordova,cors,phonegap,Javascript,Ajax,Cordova,Cors,Phonegap,这是我在这里的第一篇文章 我用POST方法发送数据有问题 控制台向我显示: “跨源请求被阻止:同一源策略不允许在读取远程资源。(原因:CORS标头“访问控制允许源”丢失)。” 我读过关于CORS的文章,但我仍然有同样的问题 这是我的密码: function track() { var xhr = new XMLHttpRequest(); xhr.open('POST', 'https://api.aftership.com/v4/trackings/', true);

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

我用POST方法发送数据有问题

控制台向我显示: “跨源请求被阻止:同一源策略不允许在读取远程资源。(原因:CORS标头“访问控制允许源”丢失)。”

我读过关于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方法,我可以创建跟踪编号,但在很长的一段时间内它不起作用。但当我创建它时,我可以在谷歌浏览器上使用带有CORS插件的DELETE方法。没有插件,我不能使用删除方法

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


请帮忙D

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

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 *">

请注意默认src中的更改。它允许任何流量,所以您可以将其更改为您的特定URL

您可以完全删除该元标记。然而,这是不安全的,应该只做,看看这是否是造成您的问题

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


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

添加了meta标签和白名单插件

添加到config.xml:

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

仍然张贴方法不起作用

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


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

我认为这是对phonegap使用网络浏览器模拟器的一个限制-浏览器强制执行CORS。在真正的移动设备上这不会是一个问题。据我所知,通常的在线建议解决方案是将服务器配置为发送
访问控制允许源代码:
。显然,如果不进行控制,您无法做到这一点在API服务器上运行,所以我不确定解决方案是什么。代码后面的段落有点不清楚-如果你有一个Chrome插件使你的代码工作(这个插件?),那就好了。CORS只是你在浏览器中测试时的一个问题,所以你可以使用那里的插件来绕过它进行测试。是的,我使用这个插件,但是POST方法仍然不起作用。你明白了吗?