Javascript XMLHttpRequest跨域抛出错误
我为登记使用的场地制作了一个表层土的“投票”APIJavascript 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
<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");