Javascript XMLHttpRequest跨域抛出错误

Javascript XMLHttpRequest跨域抛出错误,javascript,jquery,ajax,xmlhttprequest,Javascript,Jquery,Ajax,Xmlhttprequest,我为登记使用的场地制作了一个表层土的“投票”API <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script type="text/javascript"> var id = 1; $(document).ready(function(){ $.getJSO

我为登记使用的场地制作了一个表层土的“投票”API

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

    <script type="text/javascript">

        var id = 1;

        $(document).ready(function(){
            $.getJSON("http://mysite.com/index.php?page=vote", { id: id, hasVoted: 'unknown' }, function(data) {
                if(data == 2) {
                    window.location.replace("http://mysite.com/index.php?page=vote&id=" + id);
                }
            });
        });

    </script>
如果我使用此代码:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

    <script type="text/javascript">

        var id = 1;

        $(document).ready(function(){
            $.getJSON("http://mysite.com/index.php?page=vote&callback=?", { id: id, hasVoted: 'unknown' }, function(data) {
                if(data == 2) {
                    window.location.replace("http://mysite.com/index.php?page=vote&id=" + id);
                }
            });
        });

    </script>

var-id=1;
$(文档).ready(函数(){
$.getJSON(“http://mysite.com/index.php?page=vote&callback=?“,{id:id,hasvoluted:'未知'},函数(数据){
如果(数据==2){
window.location.replace(“http://mysite.com/index.php?page=vote&id=“+id);
}
});
});
然后它什么也不做。它不会出错。(虽然数据应该等于2(直接检查URL时,返回2))

如果我试着做一个小测试,然后做
alert(数据)它仍然不会抛出任何东西


我对此一无所知。任何东西都会有帮助。

众所周知的问题,浏览器的原点控制:

默认情况下,浏览器不允许您向“跨源”域发出ajax请求。交叉原点表示端口或主机不同。因此,当发出请求的脚本托管在站点A上时,您无法向站点发送请求

简单的解决方案是将所有内容托管在一个域上,并使url相对。如果不可能的话,你必须找到另一种方法,不打交叉电话。 一些例子:

  • JSONP(仅获取)
  • CORS(使用现代浏览器很好)
  • 在窗口之间包括ifram+use PostMessage
  • 代理脚本
  • 编辑: 我要做的是,首先通过设置以下标题允许您的API-SERVER使用一些东西:

    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
    header("Access-Control-Allow-Headers: Authorization");
    

    请注意,这在Internet Explorer中无法正常工作,因此您必须使用:
    XDomainRequest
    。但这不允许您发送标题。请在几天前查看,如果您必须跨源发送标题

    JSONP不是魔术。您只能在远程URL支持的情况下使用JSONP。因为我发现了我遇到的其他问题,所以编辑了这个问题。@SLaks远程URL如何支持它?编辑:让它工作起来了,谢谢。是的,但你也必须在api服务器端实现它。不客气。几个星期以来我一直在讨论可能的解决办法。但是要注意IE。即使IE9也不能正确地支持CORS。拥有一个php代理脚本应该是一个很好的后备方案
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
    header("Access-Control-Allow-Headers: Authorization");