如何在子域之间发布时解决AJAX Access-Control-Allow-Origin

时间:2013-12-15 20:37:21

标签: jquery ajax cors

我正在尝试解决用户通过http://domain.com访问我的网站时发生的Access-Control-Allow-Origin问题,并将ajax请求发布到http://www.domain.com

我认为最简单的方法是重写从http://domain.comhttp://www.domain.com的所有请求?如果是这样,我将如何启用此功能?

是否有其他方式允许这样的CORS请求?

以下示例代码

$(document).on('submit', "#registerform, #confirmreset", function(event){
            //disable default click operation
            event.preventDefault();

            var action_url = $(this).attr("action");
            $('#lightbox').fadeIn(250);
            $('#lightbox-content-table').html("<i class='fa fa-spinner fa-lg fa-spin'></i> &nbsp;processing...");
          //  console.log(action_url);
          var postData = $(this).serializeArray();
          //  console.log(postData);

          $.post(action_url,postData,function(data){

            console.log(data);
            var obj = $.parseJSON(data);

           // if(obj.status == "error"){
            $('#lightbox-content-table').html(obj.message)

          //   }
          if(obj.status == "success" && obj.message == "Success!")
          {
            window.location.replace(obj.redirect).delay(0);
          }
        });

        });

2 个答案:

答案 0 :(得分:3)

如果您有权访问子域,只需添加响应标头:

Access-Control-Allow-Origin: *

如果你使用PHP就是这样:

<?php header('Access-Control-Allow-Origin: *'); ?>

对于ASP.Net,您可以尝试:

Response.AppendHeader("Access-Control-Allow-Origin", "*");

无法访问您的服务器并添加此标头唯一的方法是更改​​您的浏览器设置,这不是一个真正的解决方案。对于Google Chrome,请使用以下参数打开它:

C:\Program Files\Google\Chrome\Application\chrome.exe --disable-web-security
在Firefox中你必须像这样更改about:config

about:config -> security.fileuri.strict_origin_policy -> false

答案 1 :(得分:0)

  

我认为最简单的方法是重写从http://domain.comhttp://www.domain.com的所有请求?如果是这样,我将如何启用此功能?

假设Apache:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect 301 / http://example.com/
</VirtualHost>

<VirtualHost *:80>
    ServerName example.com
    # Your regular server config
</VirtualHost>