Я работаю над 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"}]})
$http.jsonp
не может работать с этим API. Чтобы получить данные, используйте$http.get
иtransformResponse
для удаления вызова функции. См. этот PLNKR. - person georgeawg   schedule 11.04.2018