无法阅读财产' get'未定义的

时间:2016-03-30 08:20:00

标签: angularjs

我有这个angularjs函数:

var ajax = (function () {
    var ajax = function () { };
    ajax.get = function (_url) {
        var _data = '';
        $http({
            url: _url,
            method: "GET",
            data: _data
        }).success(function(data, status, headers, config) {
            $scope.data = data;
            console.log(data);
        }).error(function(data, status, headers, config) {
            $scope.status = status;
        });
    }
})();

调用此函数时:

ajax.get("http://www.test.com/request");

我收到此错误:

  

无法阅读财产' get'未定义的

这里有什么问题?

3 个答案:

答案 0 :(得分:1)

在顶级你有var ajax = (function () {...})(),这是IIF,它不会返回任何内容,这意味着你的ajax将是未定义的。您想从IIF中返回创建的ajax对象。

尝试这样的事情

var ajax = (function () {
 var ajax = function () { };
 ajax.get = function (_url) {
    var _data = '';
    $http({
        url: _url,
        method: "GET",
        data: _data
    }).success(function(data, status, headers, config) {
        $scope.data = data;
        console.log(data);
    }).error(function(data, status, headers, config) {
        $scope.status = status;
    });
}
return ajax;
})();

答案 1 :(得分:1)

让我们从这里开始:

var ajax = function () { };

ajax不是一个对象,它是一个函数,这就是你不能做这个任务的原因

 ajax.get = function (_url) {
    var _data = '';
    $http({
        url: _url,
        method: "GET",
        data: _data
    }).success(function(data, status, headers, config) {
        $scope.data = data;
        console.log(data);
    }).error(function(data, status, headers, config) {
        $scope.status = status;
    });
}

如果你想这样做,你就像这样声明变量:

var ajax = {};

现在来看大局:

var ajax = (function () {
var ajax = { };
ajax.get = function (_url) {
    var _data = '';
    $http({
        url: _url,
        method: "GET",
        data: _data
    }).success(function(data, status, headers, config) {
        $scope.data = data;
        console.log(data);
    }).error(function(data, status, headers, config) {
        $scope.status = status;
    });
}
})();

您无法访问功能变量,即使您可以这样做(当然仍然不正确):

ajax.ajax.get("http://www.test.com/request");

试试这个:

var ajax = { };
ajax.get = function (_url) {
    var _data = '';
    $http({
        url: _url,
        method: "GET",
        data: _data
    }).success(function(data, status, headers, config) {
        $scope.data = data;
        console.log(data);
    }).error(function(data, status, headers, config) {
        $scope.status = status;
    });
 }
};

并访问它:

ajax.get("http://www.test.com/request");

答案 2 :(得分:0)

function() {
            var ajax = function() {};
            ajax.get = function(_url) {
              console.log(1)
            }
          })();

注意返回一个值,所以ajax是未定义的,然后你调用undefined of get。



    var ajax = (function() {
      var ajax = function() {};
      ajax.get = function(_url) {
        console.log(1)
      }
    })();


    console.log(
      (function() {
        var ajax = function() {};
        ajax.get = function(_url) {
          console.log(1)
        }
      })()
    )
     ajax.get("http://www.test.com/request");