我正在使用以下脚本-
<!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。原产地http://localhost:8080不被访问控制允许来源允许的。
http://10.0.0.8:9000/demo
http://localhost:8080
我已经难过了两天,有人可以帮我吗?
提前谢谢
问题是您正在尝试进行跨域调用(从http://localhost:8080到http://localhost:9000)。Same Origin Policy不允许这样做,因此浏览器试图使用跨域资源共享来询问服务器是否可以允许跨域调用。(这是OPTIONS您正在看到的HTTP请求。)由于服务器未OPTIONS使用允许调用的标头来答复请求,因此出于安全原因,浏览器拒绝了该请求。
http://localhost:9000
OPTIONS
SOP适用于所有真正的“ ajax”调用(例如,通过XMLHttpRequest)。您可以:
XMLHttpRequest
更新服务器以实现对OPTIONS请求的响应,并返回标头以允许调用(这将使其在大多数现代浏览器上运行),或者
将请求发送到同一端口(我想您没有这样做是有原因的),因此该请求发送到相同的源并且SOP不适用,或者
切换到使用JSON-P。但是JSON-P不适用于表单提交,因为它是GET,并且GET操作本应是幂等的,而大多数表单提交则不是。因此,除非这恰好是幂等的表单提交(例如,搜索),否则使用JSON-P充其量是最好的方法。
JSON-P
GET