Javascript 有没有办法绕过测试服务器的跨源资源共享?

Javascript 有没有办法绕过测试服务器的跨源资源共享?,javascript,json,cors,Javascript,Json,Cors,我正在为我儿子的Wordpress网站做一些javascript/jQuery编程,我通常喜欢在家里的电脑上测试,而不是在现场的网站上。他的站点自始至终都采用他的域名,所以为了测试,我在我的主机文件中输入条目,将他的域名重定向到我的本地主机 然而,我正在尝试测试一个用于Yahoo finance api的json回调,我得到了一个关于跨源资源共享的错误。雅虎显然对我的主机文件一无所知,所以它收到了我的请求,要求它将结果发送到另一个域 我不确定在我的本地系统上启用CORS是否有帮助,尽管我尝试过这

我正在为我儿子的Wordpress网站做一些javascript/jQuery编程,我通常喜欢在家里的电脑上测试,而不是在现场的网站上。他的站点自始至终都采用他的域名,所以为了测试,我在我的主机文件中输入条目,将他的域名重定向到我的本地主机

然而,我正在尝试测试一个用于Yahoo finance api的json回调,我得到了一个关于跨源资源共享的错误。雅虎显然对我的主机文件一无所知,所以它收到了我的请求,要求它将结果发送到另一个域

我不确定在我的本地系统上启用CORS是否有帮助,尽管我尝试过这样做。有可能是我错了,它应该可以工作,也许是我错误地启用了它,但我怀疑我需要在他的真实服务器(GoDaddy)上启用它,我怀疑他们是否愿意这样做

有人知道解决这个问题的方法吗?如果没有相当简单的解决方案,我想我将在live server上进行测试,并使用一个未发布的页面进行测试,这应该是相当无害的

编辑
我想我现在更明白发生了什么。我的理解是,这样可以防止站点通过重定向到不同的地址(或类似的地址)来截获我请求的数据

根据要求,以下是我的测试代码:

var data = encodeURIComponent('select  from yahoo.finance.quotes where symbol in ("GOOG")&env=http://datatables.org/alltables.env&format=json');
var url = 'http://query.yahooapis.com/v1/public/yql ';
jQuery.getJSON(url, 'q=' + data, callback);   
我的回调函数从未被调用,因此它在这里不相关。我可以将整个URL粘贴到Firefox或Chrome的地址栏中,然后毫无错误地返回数据,所以我知道这是正确的

我尝试了Maximillian Laumeister建议的命令行“google chrome--禁用web安全”,但在控制台中出现了以下错误:

XMLHttpRequest cannot load http://query.yahooapis.com/v1/public/yql%20?q=select%20%20from%20yahoo.fina…OG%22)%26env%3Dhttp%3A%2F%2Fdatatables.org%2Falltables.env%26format%3Djson. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.wenboinvestment.com' is therefore not allowed access. The response had HTTP status code 404.
(他的网站是WenboinInvestment.com)

第一部分-为什么会出现交叉来源错误 您的错误是由浏览器强制执行导致的,这会阻止网页访问来自其他域的资源,除非满足一组特定的条件

绕过跨源资源共享错误的一种方法是在浏览器中临时禁用同一源策略。对于Google Chrome,使用
--disable web security
命令行参数运行Chrome。这将禁用Chrome中的同源策略,这意味着您可以从您想要的任何域跨域加载。(当然,在这些支票被注销的情况下,不要随意浏览互联网,它们的存在是有原因的。)

以下是操作方法:

在Windows中:

创建Chrome的快捷方式。右键单击它,单击“属性”并添加:

到“目标”字段


Mac OS/Linux中的

打开命令提示符并运行:

google-chrome --disable-web-security

有关更多详细信息,请参阅


第2部分-为什么会出现404错误 关于第二个错误,您的查询只是格式不正确(您将GET参数与查询字符串一起编码,而为了正常工作,它们需要取消编码)。下面是一个演示固定查询的示例:

var data = encodeURIComponent("select * from yahoo.finance.quotes where symbol in ('GOOG')");
var url = 'http://query.yahooapis.com/v1/public/yql';
jQuery.getJSON(url, 'q=' + data + '&env=http://datatables.org/alltables.env&format=json', callback);

function callback(xhr) {
    console.log(xhr);
}
在Chrome中运行,它应该如下所示(您可以看到AJAX结果打印到控制台):


事实证明,当你有一个格式正确的查询时,Yahoo会设置正确的服务器头,因此如果你只是在使用YQL,你甚至不需要使用
--禁用web安全性
技巧。

Marty,你应该分享你编写的请求代码。你确认了我发帖以来的想法,CORS应该在不改变GoDaddy的情况下工作。我想我明白为什么现在会这样。但我认为我还有其他问题,因为我不是mydomain.com,雅虎也没有办法将数据返回给我。我现在得到一个稍微不同的错误。哇,非常感谢。我确认它在最初的Firefox中工作。我甚至安装了Chrome,因为Chrome似乎忽略了我版本中的标志,并且我发现URL无法直接工作,尽管我确信它以前已经工作过了。我不知道不编码地址的一部分-我相信我在地址不工作时更改了它。一直学习新的东西。@MartyFried很高兴你让它工作起来了,祝项目好运!
var data = encodeURIComponent("select * from yahoo.finance.quotes where symbol in ('GOOG')");
var url = 'http://query.yahooapis.com/v1/public/yql';
jQuery.getJSON(url, 'q=' + data + '&env=http://datatables.org/alltables.env&format=json', callback);

function callback(xhr) {
    console.log(xhr);
}