2013-08-30 26 views
5

Ho creato un servizio AngularJS che sta colpendo l'API REST di Salesforce direttamente dal client. Tuttavia, non sono stato in grado di farlo funzionare a causa delle stesse restrizioni di origine. Anche quando si accede a servizi REST non autenticati e si provano sia $ http, $ http.json e Ajax. Ho anche provato molte combinazioni di JSON, JSONP ecc.Qual è il modello architettonico corretto per la chiamata REST tra domini in AngularJS?

Dato che ho avuto così tanti problemi, penso che il mio approccio generale sia errato. Forse ho bisogno di configurare un server proxy per questo? Il mio back-end è Firebase, quindi attualmente non ho il mio server.

Non credo che l'API Salesforce supporti i COR e non posso cambiarlo.

Ecco un esempio di ciò che ho provato utilizzando $ http e 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

Sì, se i punti finali di Salesforce non supportano CORS, allora non è possibile accedere ai propri servizi dal solo il client. È necessario eseguire un semplice server proxy nello stesso dominio in cui è presente l'app Web, che inoltra le richieste agli endpoint dell'API Salesforce e invia i risultati. – Anant

+0

Grazie. È utile – wisemanIV

+0

Ho impostato un semplice proxy Ruby Sinatra e funziona perfettamente. La mia app è HTTPS in esecuzione su più sottodomini, quindi imposto ancora l'intestazione di risposta del controllo accessi nel codice RUby - response ['Access-Control-Allow-Origin'] = '*' – wisemanIV

risposta

0

avete bisogno di andare in Impostazioni di connessione remota all'interno di Salesforce poi CORS e whitelist il nome di dominio ...

ho avuto lo stesso problema e mi sembrava di aver risolto il problema.

vedere se questo aiuta here