0

在我的 html 中我有

typeahead="name for name in search($viewValue)

我从服务器返回的数据符合预期。但是我现在意识到,由于这是一个异步请求,所以我在下面代码中的多个位置所做的返回是毫无价值的,因为它们没有返回数据数组,因此上面的 html 代码可以接收它。

        $scope.search = function (term) {
            return $http({
                method: 'GET',
                url: 'rest/search',
                params: {
                    term: term,
                    types: '21'
                }
            }).
            success(function (data, status, headers, config) {
                var Names = [];
                for (var i = 0; i < data.length; i++) {
                    Names.push(data[i].name);
                }
                console.log(Names);//as expected

                return Names;
            }).
            error(function (data, status, headers, config) {
                console.log(status);
            });

        };

我应该如何以数组形式从异步 HTTP GET 请求中返回数据,以便我的 typeahead 可以使用它。

我是否应该在 HTTP GET 成功https://stackoverflow.com/a/12513509/494461上存储像此示例这样的数据变量

但是我怎样才能运行该函数以及使用数组中的存储变量呢?

typeahead="name for name in search($viewValue)

或者

typeahead="name for name in dataStoredInHTTPGetSucess

我可以以某种方式将上述两者结合起来吗?

4

1 回答 1

1

这或多或少与https://stackoverflow.com/a/15930592/1418796重复。您需要做的是从您的函数中返回一个承诺,类似于以下内容:

$scope.search = function (term) {
        return $http({
            method: 'GET',
            url: 'rest/search',
            params: {
                term: term,
                types: '21'
            }
        }).
        then(function (response) {
            var names = [];
            for (var i = 0; i < response.data.length; i++) {
                names.push(response.data[i].name);
            }
            console.log(names);//as expected

            return names;
        });

    };
于 2013-10-17T16:10:06.597 回答