Jquery 对本地主机Web API的跨域ajax调用

Jquery 对本地主机Web API的跨域ajax调用,jquery,ajax,Jquery,Ajax,我在本地主机上托管了一个Web API,并试图从域www.somedomain.com上的页面X调用它 第X页上的ajax代码如下所示: $("#pingServer").click(function () { $.ajax({ url: "http://localhost:8081/api/v1/echo", data: data, type:"POST" }).done(funct

我在本地主机上托管了一个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页面上,它总是失败

为什么?

这是因为“同一原产地政策”。根据“同源策略”,从一个源(方案、主机和端口)不能访问另一个源的DOM。换句话说,您不能进行AJAX调用,也不能通过WebSocket从一个原点连接到另一个原点。有一些方法可以解决这个问题,但主要有两种:

  • 不需要进行ajax调用,您可以获取JS文件,因此您可以通过JS导入JSON文件和数据。它被称为JSONP,JQUERY使它非常简单:

  • 您可以修改服务器,使其工作,尽管两个来源不同。它被称为CORS——W3C规范,允许跨域通信。下面有一篇文章解释了这种方法:


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

    在控制台中会出现什么错误?除非您在显示网页时在同一台机器上托管Web API,否则这不会正常工作?Localhost是当前计算机,对吗?Web API和网页是两台不同的计算机。localhost是当前计算机。