javascript - ليس API JSONP API-كيفية الحصول على البيانات دون CALLBACK المعلمة



angularjs (1)

الزاوي 1.6 - JSONP يلقي استثناء على الرغم من الاستجابة مع الحالة: 200 موافق لعنوان URL

ايم محاولة الاستيلاء على بعض البيانات من نقطة النهاية JSONP. يبدو أن البيانات يتم إرجاعها في الاستجابة ولكن الزاوي يلقي خطأً.

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 :.(

});

أتلقى الخطأ التالي: Uncaught ReferenceError: jobs is not defined at jobs-api?jobs=angular.callbacks._0:1 حيث تشير jobs إلى بادئة JSONP الخاصة بي

بعد الرد بإرجاع البرنامج النصي JSONP:

لماذا يتم طرح هذا الاستثناء وكيف يمكن إزالته؟ أنا على الزاوي 1.6.0


Answer #1

ليس واجهة برمجة تطبيقات JSONP API قانونية

واجهة برمجة التطبيقات في عنوان URL هذا ليست واجهة برمجة تطبيقات JSONP API قانونية.

يمكن الحصول عليها مع خدمة خطيرة:

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

استخدام على مسؤوليتك الخاصة.

التجريبي

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;
    })
})
<script src="//unpkg.com/angular/angular.js"></script>
  <body ng-app="app">
    <h1>Dangerous API DEMO</h1>
    <pre>{{data | json}}</pre>
  </body>





jsonp