2013-10-13 50 views
0

我能成功地從我的本地REST API通過JQuery的訪問數據通過JQuery的,但是當我試圖從遠程REST API訪問數據(在其他域託管),我得到了錯誤,表示未定義。 我如何解決跨域問題?如何訪問其他域中託管的Rest API數據。跨域問題

這就是我如何使用通過JQuery的。

function GetCompanyName(id) { 
    jQuery.support.cors = true; 
    $.ajax({ 
     url: 'http://novacompanysvc.azurewebsites.net/api/companies', 
     type: 'GET', 
     data:{ id:id }, 
     dataType: "text/xml", 
    success: function (data) { 
     if (window.DOMParser) 
      { 
      parser=new DOMParser(); 
      xmlDoc=parser.parseFromString(data,"text/xml"); 
      } 
     else // Internet Explorer 
      { 
      xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
      xmlDoc.async=false; 
      xmlDoc.loadXML(data); 
      } 
     WriteResponse(data); 
    }, 
    error: function (x, y, z) { 
      alert('error'); 
    } 
    }); 
} 

回答

1

發生此錯誤是因爲您正在訪問的API端點未實現CORS。 如果您在Chrome中運行代碼,並期待在控制檯,你會看到一個錯誤:

XMLHttpRequest cannot load http://novacompanysvc.azurewebsites.net/api/companies?id=1. Origin http://fiddle.jshell.net is not allowed by Access-Control-Allow-Origin.

解決的辦法是改變API終點到Access-Control-Allow-Origin頭設置爲通配符*或使用JavaScript代碼的頁面所在的域。

+0

謝謝。我如何更改API端點以設置Access-Control-Allow-Origin?由於我是JQuery的新手,你能否通過提供示例代碼給我提供解決方案? – SPBeginer

+0

寫入API服務器的語言或框架是什麼?根據這一點,您將不得不在服務器代碼中進行一些更改。 – sdqali

0

我也面臨同樣的問題。

現在它由我來解決。 假設你有兩個域。 域1和域2

,你可以使用這種技術。

創建由DOMAIN1使用服務器端腳本一箇中間層,你可以從DOMAIN2使用Java,PHP等獲取數據,然後在DOMAIN1創建一個REST服務,並在DOMAIN1使用REST服務。

0

我也遇到過這個問題。 i。由

避免混合內容阻擋解決這個問題是服務的所有內容作爲HTTPS而不是HTTP。

爲自己的域名服務所有內容HTTPS和修復你的鏈接。
您提出:HTTP //到https //

對於如果有使用本網站的HTTPS版本的其他領域。如果HTTPS不可用,您可以嘗試聯繫域名並詢問他們是否可以通過HTTPS提供內容。