我發誓,這是早期的工作,休息了一下,現在其又壞了......
我建立一個連接到一個自定義的公共REST API的應用程序AngularJS我使用Salesforce創建。我已經通過curl和apigee.com測試了REST api,並且正在正確地返回數據。當我嘗試通過Angulars $ http.jsonp()方法調用相同的端點時,會發生此問題。根據Chromes Network的監測,當我嘗試這樣做時,請求被取消。
角廠:
angular.module('SalesforceService', [], function($provide){
$provide.factory('$salesforce', function($http, $q){
return {
login: function(email, password){
var endpoint = 'https://merchant.dev1.cs15.force.com/freelance/services/apexrest/FreelanceService?name=Jonathan&callback=JSON_CALLBACK';
var deferred = $q.defer();
console.log('...calling salesforce...');
$http.jsonp(endpoint)
.success(function(data){
console.log('--SALESFORCE RESPONSE:');
console.log(data);
deferred.resolve(data);
}).error(function(data, status, headers, config){
console.log('---SALESFORCE ERROR:');
console.log(data);
console.log(status);
console.log(headers());
console.log(config);
deferred.reject('An error occurred when attempting to login.');
});
return deferred.promise;
}
};
});
})
我再通過$ salesforce.login()我的控制器的一個調用這個服務...
自定義的Salesforce REST類別:
@RestResource(urlMapping='/FreelanceService')
global class FreelanceService
{
global class TestObject{
public String message;
public TestObject(String message){
this.message = message;
}
}
@HttpGet
global static void goGet()
{
String name = RestContext.request.params.get('name');
TestObject o = new TestObject('Hello ' + name);
RestContext.response.addHeader('Content-Type', 'application/json');
RestContext.response.responseBody = formatResponse(o);
}
public static blob formatResponse(TestObject obj)
{
//instantiate string to be returned
String response;
//get callback parameter from url
String callback = RestContext.request.params.get('callback');
//return JSON wrapped in function if a callback parameter exists
if(callback!=null)
{
response = callback + '('+JSON.serialize(obj)+')';
}
else
{
response = JSON.serialize(obj);
}
return blob.valueOf(response);
}
}
對於我的生活,我無法弄清楚爲什麼這不工作......任何想法?
很難說了。那麼,jsonp調用是否會轉到您控制的終結點,或者它是否無法控制?你的代碼中的一個'奇怪'的事情是你爲http調用創建了一個延遲對象。你實際上不必這樣做,因爲$ http本身返回一個承諾 – Narretz
我創建了一個延遲對象,所以我可以在將結果注入到任何控制器之前對服務中的數據進行過濾。 – jonnybro