3

我正在使用以下脚本 -

<!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/demo404(未找到)jquery-1.9.1.min.js:5 XMLHttpRequest 无法加载http://10.0.0.8:9000/demo。Access-Control-Allow- Originhttp://localhost:8080不允许 Origin。

我这两天都被难住了,谁能帮帮我?

提前谢谢

4

1 回答 1

19

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

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

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

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

  3. 切换到使用JSON-P. 但是JSON-P不适合表单提交,因为它是GET, 并且GET操作意味着是idempotent,而大多数表单提交不是。因此,除非这恰好是一个幂等表单提交(例如,搜索),否则使用 JSON-P 充其量只是一个 hack。

于 2013-03-14T14:38:05.330 回答