【发布时间】:2014-10-08 08:32:33
【问题描述】:
我正在尝试通过采用此代码来使用我的 Web Api 控制器实现 Typeahead,效果很好:
HTML
<div class='container-fluid' ng-controller="TypeaheadCtrl2">
<pre>Model: {{result | json}}</pre>
<input type="text" ng-model="result" typeahead="suggestion for suggestion in cities($viewValue)">
</div>
app.js 中的控制器
myApp.controller('TypeaheadCtrl2', function ($scope, $http, limitToFilter) {
//http://www.geobytes.com/free-ajax-cities-jsonp-api.htm
$scope.cities = function (cityName) {
return $http.jsonp("http://gd.geobytes.com/AutoCompleteCity?callback=JSON_CALLBACK &filter=US&q=" + cityName).then(function (response) {
return limitToFilter(response.data, 15);
});
};
});
但是,当我将 return $http.jsonp("http://gd.geobytes.com/AutoCompleteCity?callback=JSON_CALLBACK &filter=US&q=" + cityName) 更改为调用我自己的 WebApi 控制器 return $http.jsonp("api/airports/" + cityName) 时,它停止工作。
但如果我直接调用我的 Web Api,比如http://mysite:80/api/airports/los,它会返回这个 json:
["San Martin DeLos Andes (CPC)","San Carlos DeBariloche (BRC)","Los Menucos (LMD)","Paso De Los Libres (AOL)","Barbelos (BAZ)","Los Angeles (LSQ)","Los Chiles (LSL)","Mali Losinj (LSZ)","Milos (MLO)","Volos (VOL)","Paso Caballos (PCG)","Los Mochis (LMM)","Vilanculos (VNX)","San Carlos (NCR)","Lagos (LOS)","Losuia (LSA)","Lossiemouth (LMO)","Los Angeles (JID)","Los Angeles (JBP)","Los Alamos (LAM)","Los Angeles (LAX)","Los Banos (LSN)","Lost Harbor (LHB)","Lost River (LSR)","San Carlos (SQL)","Los Angeles, CA (VNY)","Los Angeles (WHP)","Los Roques (LRV)"]
与http://gd.geobytes.com/AutoCompleteCity?filter=US&q=los返回的格式完全相同:
["Los Alamitos, CA, United States","Los Alamos, CA, United States","Los Alamos, NM, United States","Los Altos, CA, United States","Los Angeles, CA, United States","Los Banos, CA, United States","Los Ebanos, TX, United States","Los Fresnos, TX, United States","Los Gatos, CA, United States","Los Indios, TX, United States","Los Lunas, NM, United States","Los Molinos, CA, United States","Los Ojos, NM, United States","Los Olivos, CA, United States","Los Osos, CA, United States","Losantville, IN, United States","Lost City, WV, United States","Lost Creek, KY, United States","Lost Creek, PA, United States","Lost Creek, WV, United States"]
请指教。
【问题讨论】:
-
你的 Web API 和 angularjs 应用是否在同一个域中?
-
是的,它们在同一个域中。
-
同域然后你不需要 jsonp,但如果你想让 jsonp 与 web api 一起工作,你必须安装格式化程序
标签: angularjs autocomplete angular-ui-bootstrap typeahead search-suggestion