从AngularJS中的JSON对象(来自给定API)获取数据

问题描述 投票:0回答:2

我有以下代码来显示链接(API)中的数据作为自动完成框的建议。虽然它适用于一个链接而不是另一个链接。我观察到两者的数据格式不同,相应地修改了我的代码,但它仍然没有帮助。

.js文件:

var plunker= angular.module('plunker', ['ui.bootstrap', 'ngGrid']);
function TypeaheadCtrl($scope, $window, $http, limitToFilter) {

$scope.cities = function (cityName) {
    return $http.jsonp("http://mtapi.azurewebsites.net/api/institute").then(function           (response) {
 return response[0].description;
    });
};
}

HTML文件:

<input type="text" id="depn" ng-model="formdata.department"        
       typeahead="suggestion.description for suggestion in cities($viewValue)"   
       placeholder="department" class="form-control">

如果用这个替换cities函数,

 $scope.cities = function (cityName) {
    return $http.jsonp("http://gd.geobytes.com/AutoCompleteCity?callback=JSON_CALLBACK   &filter=US&q=" + cityName).then(function (response) {
        return response.data;
    });
};``

即使我将代码jsonP请求更改为.get,它仍然无法正常工作

var plunker= angular.module('plunker', ['ui.bootstrap', 'ngGrid']);
function TypeaheadCtrl($scope, $window, $http, limitToFilter) {
  $scope.cities = function (cityName) {
    return $http.get("http://mtapi.azurewebsites.net/api/institute").success(function(data) {
       return data[0].description;
    });
  };
}

它工作正常。我的代码或后端服务器问题是否有问题?

json angularjs api
2个回答
0
投票

更改您的城市功能以使用.then中的响应的数据属性(这是您将如何从已解析的HttpPromise访问响应):

var plunker= angular.module('plunker', ['ui.bootstrap', 'ngGrid']);
function TypeaheadCtrl($scope, $window, $http, limitToFilter) {

$scope.cities = function (cityName) {
    return $http.get("http://mtapi.azurewebsites.net/api/institute").then(function           (response) {
         return response.data[0].description;
    });
};

编辑

即使进行代码更改也无法解决您的问题。此URL不支持跨源请求,因此您需要在同一域上托管angularjs应用程序并使用普通的$ http.get而不是$ http.jsonp,或者此url需要支持JSONP请求(内容 - 这个url的响应类型是application / json。要使JSONP工作,它应该是application / javascript)。


0
投票

我最近想通了。除了后端的问题,此代码中也存在问题。我正在返回承诺,但承诺永远不会被解决返回值也我试图返回一个字符串,而我应该返回字符串数组。这是改变:

 $scope.aap = result.data;
  var res = [];
  res.push($scope.aap[0].Description);
  return res;
© www.soinside.com 2019 - 2024. All rights reserved.