【问题标题】:AngularJS $http success but not workingAngularJS $http 成功但不工作
【发布时间】:2025-12-25 07:05:06
【问题描述】:

我正在使用 angularJS 和 SLIM PHP restful 服务器,PHP 服务正在运行,实际上我已经使用 $http.get() 在这个应用程序中没有任何问题...... 但是现在发生了一件奇怪的事情,我以与其他函数相同的方式创建了一个新函数,它得到 .success(function(data)) 没有问题,我实际上可以 console.log(data) 并且它显示正确结果,但是当 .success() 完成并返回时,我收到一个未定义的结果。 ps:浏览器控制台没有错误。

    var markerOptions = [];
    loadMarkers();
    console.log(markerOptions);

    function loadMarkers() {
    $http.get('http://localhost/rest/getMarkers').success(function(response){
            console.log(response);
            markerOptions = response;
    });
}
  • success() 中的 Console.log() 返回正确的数据
  • loadMarkers() 后的 Console.log() 返回 undefined

【问题讨论】:

  • 由于 $http.get 是异步的,因此在您的同步代码启动时,它的结果不会立即可用。这就是为什么您的console.logsuccess 之外是空的。
  • 顺便说一句,这是一个非常常见的痛点,值得一劳永逸地头疼。
  • 嗯,我明白了,非常感谢 Marc。我现在正试图以角度实现这个解决方案.. 但是你再次告诉我路径。
  • 上面文章中的*答案作为入门非常棒,然后您可以阅读Angular中的documentation on $q以获得更多思考。

标签: angularjs angularjs-http


【解决方案1】:

@MarcKline 的 cmets 是正确的。无论如何,按照我认为您试图通过您的这段代码实现的目标,您可以将来自 ajax 响应的返回数据分配给范围变量(假设您使用的是 $scope),例如$scope.markerOptions = response。您可以通过var $scope.markOptions = [] 将markOptions 声明为范围变量(...当然,相应地通过console.log($scope.markOptions) 记录它)。另外,定义$scope.loadMarkers = function() {...} 并通过$scope.loadMarkers() 调用它

一旦客户端收到它的 ajax 响应,范围就会更新。 除了更好地理解 javasciprt 的异步方法(cmets 向您解释了它的一些原理)之外,希望它对您当前的需求有所帮助。

【讨论】:

  • 我尝试过,但不起作用,我也尝试使用 .then() ......但仍然不起作用:(
  • 通过 $scope.loadMarkers = function() {...} 将 loadMarkers 定义为范围函数,并通过 $scope.loadMarkers() 调用它