2013-08-30 25 views
5

我創建了一個直接從客戶端訪問Salesforce REST API的AngularJS服務。但是,由於相同的原產地限制,我無法工作。即使訪問未經過身份驗證的REST服務並嘗試使用$ http,$ http.json和Ajax。我也試過很多Json,Jsonp等組合。AngularJS中跨域REST調用的正確體系結構模式是什麼?

鑑於我有這麼多問題,我在想我的一般方法是不正確的。也許我需要爲此設置一個代理服務器?我的後端是Firebase,因此我目前沒有自己的服務器。

我不相信Salesforce API支持COR,我無法改變這一點。

這裏是我嘗試使用$ http和Ajax的例子。

return $http.jsonp('https://na1.salesforce.com/services/data/',{ 
headers: { 
    'Content-type': 'application/json', 'Accept': 'application/json' 
}}). 
       success(function (data, status, headers, config) { 

        callback(data); 
        console.debug(data.json); 
       }). 
       error(function (data, status, headers, config) { 
        console.debug("getVersions: failed to retrieve data: "+eval(data)); 
       }); 


$.ajax({ 
       url: 'https://na15.salesforce.com/services/data', 
      type: "GET", 
       dataType: "jsonp", 
       beforeSend: function(xhrObj){ 
            xhrObj.setRequestHeader("Content-Type","application/json"); 
            xhrObj.setRequestHeader("Accept","application/json"); 
            xhrObj.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 
           }, 
       success: function (data) { 
        console.debug(data); 
        callback(data); 
       }, 
       error: function(data) { 

       } 
      }); 
+3

是的,如果Salesforce的終端不支持CORS,那麼你不能只從客戶端訪問他們的服務。您需要在您的Web應用程序是服務器的同一個域上運行簡單的代理服務器,該服務器將請求轉發給SalesForce API端點併發送您的結果。 – Anant

+0

謝謝。這是有幫助的 – wisemanIV

+0

我設置了一個簡單的Ruby Sinatra代理,它完美地工作。我的應用程序是在多個子域上運行的HTTPS,所以我仍然在RUby代碼中設置訪問控制響應標頭 - 響應['Access-Control-Allow-Origin'] ='*' – wisemanIV

回答

0

你需要進入Salesforce內遠程設置,然後CORS和白名單域名...

我有同樣的問題,它似乎已經解決了這個問題。

看看這有助於here

相關問題