我正在尝试在我的 Web 应用程序上实现 CORS(跨域资源共享)。这是结构:
- 站点 example.com:包含几个 JS 文件(jquery.js、myscript.js)
- 站点 example2.com:从 example.com 加载两个脚本,然后从 myscript.js 调用一个函数,该函数向 example.com 发出 POST 请求
example2.com 代码类似于:
<script src="http://example.com/jquery.js" type="text/javascript"></script>
<script src="http://example.com/myscript.js" type="text/javascript"></script>
<script type="text/javascript">startFunction(1, 2)</script>
两个 JS 在站点 B 上都可以正常加载。但是,当调用该函数并执行 POST(标准 jQuery $.post)时,我收到以下错误:
XMLHttpRequest 无法加载http://example.com/postrequest。Access-Control-Allow-Origin 不允许来源 http://example2.com 。
我去了example.com服务器并像这样更新了.htaccess:
Header set Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control"
Header add Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
我检查了是否正在发送标头,并且确实正在发送它们。使用火狐访问example2.com,JS文件加载完毕,POST请求成功。但是,如果我尝试对 Chrome 进行完全相同的操作,它仍然会失败。我已经处理了几个小时,但我仍然看不出这有什么问题。这是Chrome错误还是什么?
我必须指出,我检查了类似的问题并应用了一些解决方案,但我没有成功。
更新:尝试了添加此建议的解决方案:
$.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader('Content-Type', 'text/plain');
}
});
确实设置了 Content-Type,但同样的错误不断发生,所以这并没有解决任何问题。