为什么我的Angular代码返回undefined?

时间:2015-12-27 05:54:16

标签: javascript angularjs

我正在使用angular to geo定位客户端的地址使用angular和一些API服务。我已经得到它以正确找到IP地址,但由于某种原因,我还没有能够执行地理查找。 API服务运行正常,我的URL似乎也很好。

'use strict';

angular.module('Zeus', [])
.controller('ZeusController', function ($scope, $http) {

    function fetchIP() {
        $http.get("http://ipv4.myexternalip.com/json")
            .then(function (response) {
                $scope.ip = response.data.ip;
            });
        return $scope.ip
    }

    var ip = String(fetchIP());

    function geoIP() {
            $http.get("https://freegeoip.net/json/" + String(ip))
                .then(function (response) {
                    $scope.country_code = response.data.country_code;
                });
        return $scope.country_code;
    }

    var latLon = geoIP();


});

我在Chrome控制台中收到以下错误:

Failed to load resource: the server responded with a status of 404 (OK)
https://freegeoip.net/json/undefined

绝对不应该定义URL,因为使用angular返回url的IP会在Web浏览器中返回正确的响应。

1 个答案:

答案 0 :(得分:3)

那是因为geoIP()有回调而你必须处理该回调

喜欢这个

function geoIP() {
    return $http.get("https://freegeoip.net/json/" + String(ip))
        .then(function(response) {
            return response.data.country_code;
        });

}
var latLon;
geoIP().then(function(r) {
    latLon = r;
})