2014-07-10 150 views
0

我在本地主机上托管一个Web API,并试图从域www.somedomain.com上的页面X调用它。跨域ajax调用localhost Web API

在第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); }) 
    }) 

当我把上面的脚本在本地主机页面,它的工作原理。 但是从www.somedomain.com页面,它始终失败。

为什么?

+1

在控制台中出现什么错误? –

+2

[同源策略](http://en.wikipedia.org/wiki/Same-origin_policy) – adeneo

+1

除非您在显示网页的同一台机器上托管Web API,否则无法正常工作? Localhost是当前的机器吗? –

回答

2

它发生是因为“相同原点策略”。根据“同源策略”,来自一个起源(方案,主机和端口)的用户不能访问其他起源的DOM。换句话说,您不能通过WebSockets从一个源向另一个源进行AJAX调用或连接。有解决它的一些方法,但2主要有:

  1. 而不是使AJAX调用,你可以得到JS文件,这样你就可以通过JS与数据导入JSON文件。它被称为JSONP和JQUERY使它非常简单:http://learn.jquery.com/ajax/working-with-jsonp/

  2. 您可以修改服务器,使其工作,虽然2个来源是不同的。它被称为CORS - 允许跨域通信的W3C规范。这里是解释这种方法的文章:http://www.html5rocks.com/en/tutorials/cors/

有更多的解决方案(如使用Flash和JS - flXHR),但我认为这2最简单的和最佳的解决方案。