Javascript Angularjs-$http请求在函数内部不起作用

Javascript Angularjs-$http请求在函数内部不起作用,javascript,angularjs,function,http,Javascript,Angularjs,Function,Http,在控制器中,我想将json文件的http请求放入函数中。只有当它在一个函数之外时,它才能工作。为什么? 我想在视图中显示内容 控制器: $http.get('components/json/list.json').success(function (data) { main.listNoFunction = data; }); main.listFunction = function () { var result = null; $http.get('componen

在控制器中,我想将json文件的http请求放入函数中。只有当它在一个函数之外时,它才能工作。为什么? 我想在视图中显示内容

控制器:

$http.get('components/json/list.json').success(function (data) {
    main.listNoFunction = data;
});

main.listFunction = function () {
    var result = null;
    $http.get('components/json/list.json').success(function (data) {
        result = data;
    });
    return result;
}
视图:

谢谢你的帮助!
Vin

您需要调用函数,而不仅仅是引用其对象名

例如:

{{ main.listFunction() }}
另外,$http是异步的,这意味着函数的结果将在$http调用完成之前返回


我建议您仔细阅读$q的承诺,以达到预期效果。

您需要调用函数,而不仅仅是引用其对象名称

例如:

{{ main.listFunction() }}
另外,$http是异步的,这意味着函数的结果将在$http调用完成之前返回


我建议你仔细阅读$q的承诺,以达到预期的效果。

第二个例子没有理由奏效。下面是对这两个代码段的解释

片段1

此代码放入控制器发出GET请求。当响应可用时,请记住这是异步操作,所以$http.get立即返回,执行进入成功回调。在它的内部填充了controllerAs的主属性listNoFunction。然后$http.get启动新的摘要循环,它应用范围对象并刷新视图。您可以看到正确呈现的数据

片段2


首先,您没有调用函数main.listFunction。但即使你这样做了,结果还是一样的。同样,$http.get不会等到服务器响应,所以整个main.listFunction返回未定义。当稍后的数据进入成功回调并设置了结果时——这太晚了,因为它无论如何都不会反映在视图中,因为结果是通过值而不是引用传递的。

第二个示例没有理由起作用。下面是对这两个代码段的解释

片段1

此代码放入控制器发出GET请求。当响应可用时,请记住这是异步操作,所以$http.get立即返回,执行进入成功回调。在它的内部填充了controllerAs的主属性listNoFunction。然后$http.get启动新的摘要循环,它应用范围对象并刷新视图。您可以看到正确呈现的数据

片段2


首先,您没有调用函数main.listFunction。但即使你这样做了,结果还是一样的。同样,$http.get不会等到服务器响应,所以整个main.listFunction返回未定义。当稍后的数据进入成功回调并设置了结果时——这太晚了,因为它无论如何都不会反映在视图中,因为结果是通过值而不是引用传递的。

这将始终返回null,$http是异步的。必须在作用域变量内返回承诺或设置结果。这将始终返回null,$http是异步的。您必须返回一个承诺或在一个范围变量内设置结果。好的,这对我来说有点混乱,因为我不理解以这种方式使用$http.get请求。那么,如何让函数返回$http.get请求的值呢?我读过$resource服务,也许这是一个更好的选择?那么,如何让函数返回$http.get请求的值呢?这是不可能的,因为您无法从AJAX请求返回$get返回一个承诺对象。此对象提供一个接口,用于设置回调函数,一旦数据来自服务器,就会调用回调函数。$resource.Ok也一样——换句话说:我想编写一个函数,它只返回JSON文件的内容,不管是否使用$http.get。有没有一种简单的方法可以做到这一点?好吧,这对我来说有点困惑,因为我不理解以这种方式使用$http.get请求。那么,如何让函数返回$http.get请求的值呢?我读过$resource服务,也许这是一个更好的选择?那么,如何让函数返回$http.get请求的值呢?这是不可能的,因为您无法从AJAX请求返回$get返回一个承诺对象。此对象提供一个接口,用于设置回调函数,一旦数据来自服务器,就会调用回调函数。$resource.Ok也一样——换句话说:我想编写一个函数,它只返回JSON文件的内容,不管是否使用$http.get。有没有一个简单的方法可以做到这一点?
$http.get('components/json/list.json').success(function (data) {
    main.listNoFunction = data;
});
main.listFunction = function () {
    var result = null;
    $http.get('components/json/list.json').success(function (data) {
        result = data;
    });
    return result;
}