Access-Control-Allow-Origin错误

Gid*_*don 3 ajax jquery 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>
Run Code Online (Sandbox Code Playgroud)

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

选项http://10.0.0.8:9000/demo404(未找到)jquery-1.9.1.min.js:5 XMLHttpRequest无法加载http://10.0.0.8:9000/demo.原产地http://localhost:8080不被访问控制允许来源允许的.

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

谢谢你

T.J*_*der 19

问题是,你想使一个跨域调用(从http://localhost:8080http://localhost:9000).同源策略不允许这样做,因此浏览器尝试使用跨源资源共享来询问服务器是否可以允许跨源调用.(这是OPTIONS您正在看到的HTTP请求.)由于服务器不回复OPTIONS带有允许调用的标头的请求,因此出于安全原因,浏览器会拒绝该请求.

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

  1. 更新服务器以实现对OPTIONS请求的响应,传回标头以允许调用(这将使其在大多数现代浏览器上工作),或者

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

  3. 切换到使用JSON-P.但是JSON-P对于表单提交是不合适的,因为它是a GET,并且GET操作意味着是幂等的,大多数形式的提交都不是.因此,除非这恰好是幂等表单提交(例如,搜索),否则使用JSON-P将是最好的黑客攻击.