Функция AngularJS .then() не возвращает данные после получения успешного ответа

Я работаю над 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"}]})

person user3760261    schedule 10.04.2018    source источник
comment
он работает, но все же я получил ошибку консоли. потому что данные поступают как ложные. Это также вызывает функцию ошибки. Вот почему я не могу получить свой ответ в своем контроллере. я получил успешный ответ в предупреждающем сообщении, которое я напечатал   -  person user3760261    schedule 10.04.2018
comment
Ответ от этого API не является допустимым JSONP. Служба AngularJS $http.jsonp не может работать с этим API. Чтобы получить данные, используйте $http.get и transformResponse для удаления вызова функции. См. этот PLNKR.   -  person georgeawg    schedule 11.04.2018
comment
Я интегрировал этот код в свой проект. У меня есть данные из сторонней библиотеки. Из-за этого $http.get() не выдает ошибку 'access-control-allow-origin'. Я добавил заголовок, чтобы получить метод. Тем не менее он выдает ошибку Preflight. Не могли бы вы помочь мне решить эту проблему.   -  person user3760261    schedule 12.04.2018
comment
Stackoverflow не является сервисом для написания кода. Возьмите код в ответе Не Legal JSONP API — Как получить данные без параметра CALLBACK и адаптировать их для работы с вашим API.   -  person georgeawg    schedule 12.04.2018
comment
Я уже пробовал, что не работает k. Вот почему я разместил этот вопрос. Я не прошу вас писать код. Какой бы ответ вы ни дали, он не работает. В вашей помощи нет необходимости.   -  person user3760261    schedule 12.04.2018