2014-07-10 108 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最簡單的和最佳的解決方案。