跨域ajax调用localhost Web API

时间:2014-07-10 07:44:15

标签: jquery ajax

我在我的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页面来看,它总是失败。

为什么?

1 个答案:

答案 0 :(得分:2)

这是因为"同源政策"。根据"同源策略",从一个来源(方案,主机和端口),您无法访问另一个来源的DOM。换句话说,您无法进行AJAX调用或通过WebSockets从一个源连接到另一个源。有一些方法可以解决它,但主要有两个:

  1. 您可以获取JS文件,而不是进行ajax调用,因此您可以通过js导入包含数据的JSON文件。它被称为JSONP,而JQUERY非常简单:http://learn.jquery.com/ajax/working-with-jsonp/

  2. 您可以修改服务器,以便它可以正常工作,尽管两个来源不同。它被称为CORS - 允许跨域通信的W3C规范。这篇文章解释了这种方法:http://www.html5rocks.com/en/tutorials/cors/

  3. 还有更多解决方案(比如使用flash和js-flXHR),但我认为这两种解决方案是最简单和最好的解决方案。