我正在使用以下脚本 -
<!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
。
我已经被困了两天了,有人可以帮帮我吗?
提前致谢
答案 0 :(得分:19)
问题在于您尝试进行跨源调用(从http://localhost:8080
到http://localhost:9000
)。 Same Origin Policy不允许这样做,因此浏览器正在尝试使用Cross-Origin Resource Sharing询问服务器是否允许跨源调用。 (这是您正在看到的OPTIONS
HTTP请求。)由于服务器没有回复带有允许呼叫的标头的OPTIONS
请求,出于安全原因,浏览器拒绝了该请求。
SOP适用于所有真正的“ajax”调用(例如,通过XMLHttpRequest
调用)。你可以:
更新服务器以实现对OPTIONS
请求的响应,传回标头以允许调用(这将使其在most modern browsers上运行)或
向同一个端口发出请求(我猜你有没有这样做的原因),所以请求是相同的来源,SOP不适用,或
切换到使用JSON-P
。但JSON-P
不适合提交表单,因为它是GET
,而GET
操作应该是idempotent,大多数提交的操作都不是。因此,除非这恰好是幂等表单提交(例如,搜索),否则使用JSON-P充其量只是一种破解。