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) {
}
});
是的,如果Salesforce的終端不支持CORS,那麼你不能只從客戶端訪問他們的服務。您需要在您的Web應用程序是服務器的同一個域上運行簡單的代理服務器,該服務器將請求轉發給SalesForce API端點併發送您的結果。 – Anant
謝謝。這是有幫助的 – wisemanIV
我設置了一個簡單的Ruby Sinatra代理,它完美地工作。我的應用程序是在多個子域上運行的HTTPS,所以我仍然在RUby代碼中設置訪問控制響應標頭 - 響應['Access-Control-Allow-Origin'] ='*' – wisemanIV