我正在尝试使用ajax从我希望能够在任何地方运行的脚本访问我网站上的某些数据。我的脚本中的ajax代码看起来像这样
var ajax = new XMLHttpRequest();
ajax.open('GET', 'http://mywebsite.com/page?i=2&json', true);
ajax.onreadystatechange = function() {
if (ajax.status == 200) {
console.log(JSON.parse(ajax.responseText));
}
else
console.log('Could not connect.');
}
ajax.send();
但是当我运行它时我得到了错误
XMLHttpRequest无法加载 http://mywebsite.com/page?i=2&json。 原点http://anotherwebsite.com是 不允许的 访问控制允许来源。
在我网站上的脚本中,我在页面内有以下几行,
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET');
但我仍然得到同样的错误。我希望我的网站上的该页面可以通过ajax从因特网上的任何其他页面访问,因为我的脚本是一个应该可以在任何网站上使用的扩展。
编辑:如果我将ajax对象上的'withCredentials'属性设置为true并且在我的服务器上发送回Access-Control-Allow-Credentials标头设置为true,那么我的工作正常。然后使用我的脚本我也通过了域,因此可以在我的服务器脚本上的Access-Control-Allow-Origin中返回它。通配符*不起作用。目前仅在Chrome中对此进行了测试。
答案 0 :(得分:1)
大多数浏览器都不允许您使用跨域ajax,因此您可以做的是调用本地服务器端脚本,该脚本使跨域ajax并将答案返回给您的javascript。 我听说它被称为“代理脚本”,是我所知道的唯一可靠的解决方案。
step 1: javascript on otherdomain.com --GET--> server-side script on otherdomain.com
step 2: server-side script on otherdomain.com --GET--> mywebsite.com/page?i=2&json
step 3: mywebsite.com/page?i=2&json --JSON--> server-side script on otherdomain.com
step 4: server-side script on otherdomain.com --JSON--> javascript on otherdomain.com