我有以下代码来显示链接(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;
});
};
}
它工作正常。我的代码或后端服务器问题是否有问题?
更改您的城市功能以使用.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)。
我最近想通了。除了后端的问题,此代码中也存在问题。我正在返回承诺,但承诺永远不会被解决返回值也我试图返回一个字符串,而我应该返回字符串数组。这是改变:
$scope.aap = result.data;
var res = [];
res.push($scope.aap[0].Description);
return res;