Estou tentando pegar alguns dados de um ponto de extremidade JSONP. Parece que os dados estão sendo retornados na resposta, mas Angular, no entanto, lança um erro.
var url = "https://careers.icims.com/jobs-api/" var trustedUrl = $sce.trustAsResourceUrl(url); $http.jsonp(trustedUrl, {jsonpCallbackParam: 'jobs'}).then(function(res){ console.log(res); // this is never executed :.( });
Estou recebendo o seguinte erro: Uncaught ReferenceError: jobs is not defined at jobs-api?jobs=angular.callbacks._0:1
que jobs
se refere ao prefixo JSONP
No entanto, a resposta retorna o script JSONP:
Por que esta exceção está sendo lançada e como ela pode ser apagada? Eu estou no Angular 1.6.0
A API nesse URL não é uma API JSONP legal.
Pode ser obtido com um serviço perigoso:
app.service("dangerousAPI", function($q) { this.get = get; function get(funcName, url) { var dataDefer = $q.defer(); window[funcName] = function(x) { dataDefer.resolve(x); } var tag = document.createElement("script"); tag.src = url; document.getElementsByTagName("head")[0].appendChild(tag); return dataDefer.promise; } })
Use por sua conta e risco.
angular.module("app",[]) .service("dangerousAPI", function($q) { this.get = get; function get(funcName, url) { var dataDefer = $q.defer(); window[funcName] = function(x) { dataDefer.resolve(x); } var tag = document.createElement("script"); tag.src = url; document.getElementsByTagName("head")[0].appendChild(tag); return dataDefer.promise; } }) .run(function($rootScope, dangerousAPI) { var url = "https://careers.icims.com/jobs-api/"; dangerousAPI.get('jobs',url).then(function(data) { $rootScope.data = data; }) })
Dangerous API DEMO
{{data | json}}