我在我的localhost上托管了一个Web API,并尝试从域名www.somedomain.com上的页面X调用它。
第X页上的ajax代码如下所示:
$("#pingServer").click(function () {
$.ajax({
url: "http://localhost:8081/api/v1/echo",
data: data,
type:"POST"
}).done(function (msg) { $("#display").text("server should have sent the result " + msg); })
.fail(function (msg) { $("#display").text("error with: " + msg); })
})
当我将上述脚本放在localhost页面时,它可以工作。 但是从www.somedomain.com页面来看,它总是失败。
为什么?
答案 0 :(得分:2)
这是因为"同源政策"。根据"同源策略",从一个来源(方案,主机和端口),您无法访问另一个来源的DOM。换句话说,您无法进行AJAX调用或通过WebSockets从一个源连接到另一个源。有一些方法可以解决它,但主要有两个:
您可以获取JS文件,而不是进行ajax调用,因此您可以通过js导入包含数据的JSON文件。它被称为JSONP,而JQUERY非常简单:http://learn.jquery.com/ajax/working-with-jsonp/
您可以修改服务器,以便它可以正常工作,尽管两个来源不同。它被称为CORS - 允许跨域通信的W3C规范。这篇文章解释了这种方法:http://www.html5rocks.com/en/tutorials/cors/
还有更多解决方案(比如使用flash和js-flXHR),但我认为这两种解决方案是最简单和最好的解决方案。