AngularJS .then()函数在获得成功响应后不返回数据

时间:2018-04-10 13:12:50

标签: angularjs http jsonp angularjs-factory asynccallback

我正在开发AngularJS 1.6.9 JSONP 。我的api端点将 projectInstance.jsonpCallback 函数作为响应。在工厂内部方法我创建了相同的回调函数,我得到了响应。但在获得成功响应之后,它还直接触发 .error()功能。我得到了我的回复,但我仍然无法将工厂的响应返回给我的控制器。我得到如下控制台错误

{data: false, status: 404, headers: ƒ, config: {…}, statusText: "error", …}

如何解决这个问题?如何将JSONP回调结果从工厂返回到控制器?

我附上了我的工作插件链接

[https://plnkr.co/edit/TidicooyborGTGHvUzJK?p=preview][1]

这是我的HTML代码

<div ng-app="myapp" ng-controller="personCtrl">
  <button ng-click="doRequest()">Make JSONP request</button>
</div

这是我的js代码

var app = angular.module('myapp', []);
app.config(function($sceDelegateProvider) {
    $sceDelegateProvider.resourceUrlWhitelist([
        'self',
        'http://www.mocky.io/v2/**'

    ]);
});
 app.controller('personCtrl', ['$http', '$scope', '$sce', 'myService', function($http, $scope, $sce, myService) {
   $scope.doRequest = function() {
     myService.getData().then(function(data) {
        console.log("data", data);
    });
  };
 }]);

app.factory('myService', function($q, $http, $sce) {
    return {
       getData: function() {
            var q = $q.defer();
            window.projectInstance = {
                jsonpCallback: function(commandName, responseData) {
                    alert(responseData.projectSnapShot[0].projectId);

                }
            }
            var url = "https://www.mocky.io/v2/5ac61eed4a000061007e065b";
            var trustedUrl = $sce.trustAsResourceUrl(url);
            $http.jsonp(trustedUrl, {
                jsonpCallbackParam: 'projectInstance.jsonpCallback'

            }).then(function(data) {
                return data.data;
            }, function(error) {
                console.log("error",error);
                return error;
            })
            return q.promise;
        }

    }
 })

这是我的回复

projectInstance.jsonpCallback("getActiveProduct",{"totalRecords":null,"projectSnapShot":[{"projectId":"333333","projectNumber":"123456","projectStatus":"Active"}]})

0 个答案:

没有答案