1

我有一个包含 ajax 脚本的全局 js 文件。它包含在每个页眉中。

<script src="http://www.mydomain.com/js/global.js" type="text/javascript"></script>

然后在 global.js 中,ajax 脚本为:

$('#send_ajax').click(function(){
   $.ajax({
      type: 'post',
      url: 'http://www.mydomain.com/ajax-process',
      data: data + '=' + encodeURI(data),
      success: function(data){
          $('#result').html();
      }
   });
});

但现在我遇到了一些奇怪的问题。如果有人像这样打开我的页面http://www.mydomain.com/somepage,脚本可以运行良好,但是有人像这样打开我的页面http://mydomain.com,它会显示 http://www.mydomain.com/ajax-process. Origin http://mydomain.com is not allowed by Access-Control-Allow-Origin.

为什么这些都是我的网站,有www没有www都会遇到这个问题?如何解决?

4

2 回答 2

0

单一来源策略说您只能对页面所在的服务器进行 Ajax 调用(脚本的加载位置实际上并不重要)

所有协议(http 或 https)、域名和端口必须完全匹配才能允许请求。www.example.com 与 example.com 相同,没有例外。

在您的情况下,您可以按照适当的粗略顺序做三件事:

  • 不要使用绝对网址 - 如果您将 Ajax 请求发送到“/ajax-process”。这将向页面来自的服务器发出请求
  • 使用重定向,以便人们只能访问 www.example.com
  • 实施跨域访问控制:这涉及发送描述允许哪些域向您的应用发出 http 请求的 http 标头。这对你来说几乎肯定是矫枉过正。
于 2012-06-17T09:17:40.523 回答
0

这个怎么样:

var url = location.protocol + '://' + location.host + '/ajax-process'
于 2012-06-17T09:27:58.323 回答