Access-Control-Allow-Origin错误

时间:2013-03-14 14:36:19

标签: jquery ajax json playframework

我正在使用以下脚本 -

<!DOCTYPE html>
<html>
<head>
<script src="jquery-1.9.1.min.js"></script>
<script>
function postForm() {

    $.ajax({
            type: 'POST',
            url: 'http://10.0.0.8:9000/demo',
            data: {"name" : "test"},
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
        })
    }

</script>
</head>
<body>
    <form id="ajaxForm" onsubmit="postForm(); return false; "  method="post"> 
        <input id="test" type="text" name="name" value="Hello JSON" /> 
        <input type="submit" value="Submit JSON" /> 
    </form>

</body>
</html>

我正在尝试访问的计算机正在运行播放框架。我收到以下错误:

选项http://10.0.0.8:9000/demo 404(未找到)jquery-1.9.1.min.js:5 XMLHttpRequest无法加载http://10.0.0.8:9000/demo。 Access-Control-Allow-Origin不允许原点http://localhost:8080

我已经被困了两天了,有人可以帮帮我吗?

提前致谢

1 个答案:

答案 0 :(得分:19)

问题在于您尝试进行跨源调用(从http://localhost:8080http://localhost:9000)。 Same Origin Policy不允许这样做,因此浏览器正在尝试使用Cross-Origin Resource Sharing询问服务器是否允许跨源调用。 (这是您正在看到的OPTIONS HTTP请求。)由于服务器没有回复带有允许呼叫的标头的OPTIONS请求,出于安全原因,浏览器拒绝了该请求。

SOP适用于所有真正的“ajax”调用(例如,通过XMLHttpRequest调用)。你可以:

  1. 更新服务器以实现对OPTIONS请求的响应,传回标头以允许调用(这将使其在most modern browsers上运行)或

  2. 向同一个端口发出请求(我猜你有没有这样做的原因),所以请求是相同的来源,SOP不适用,或

  3. 切换到使用JSON-P。但JSON-P不适合提交表单,因为它是GET,而GET操作应该是idempotent,大多数提交的操作都不是。因此,除非这恰好是幂等表单提交(例如,搜索),否则使用JSON-P充​​其量只是一种破解。