美元http.json请求被取消了

$http.jsonp requests are gettings canceled

本文关键字:取消 请求 http json 美元      更新时间:2023-09-26

我发誓这之前是工作的,休息一下,现在又不工作了…

我正在构建一个AngularJS应用程序,它连接到我用Salesforce创建的自定义公共REST api。我已经通过curl和apigee.com测试了REST api,数据正在正确返回。当我试图通过angular的$http.jsonp()方法调用相同的端点时,问题就出现了。当我尝试这样做时,请求被取消,根据chrome网络监视器。

角工厂:

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()…

Custom Salesforce REST Class:

@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);
    }
}

对于我的生活,我不明白为什么这不起作用…什么好主意吗?

结果是因为Salesforce REST服务是从Sandbox而不是Production中提供的,Chrome会因为证书名称不匹配错误而自动取消请求。

来自Salesforce网站实施指南:

只有生产组织拥有有效的secure.force.com SSL使用HTTPS访问站点。注:如果站点在使用HTTPS访问沙盒(非生产)组织可能出现证书名称不匹配警告