【问题标题】:Problems with a simple Angular JS $http object response?简单的 Angular JS $http 对象响应有问题吗?
【发布时间】:2015-07-30 15:36:01
【问题描述】:

我已经用 Angular 发布了很多帖子,但是我从未收到过回复,而且我遇到了麻烦。

PHP

<?php
    return "testing";
?>

我实际上不确定我应该在这里使用 return 还是 echo。我都试过了。 Angular 文档并没有提供对服务器端脚本的深入了解。

这是在我的控制器中:

this.acquireImages = function() {
        $http.get("resources/php/gallery.php").success(function(response){
            this.returnData = response.data;
        });
    };
    this.acquireImages();

我之前已经定义了returnData,只是为了确保它不是简单的事情,比如不显示正确的变量等等。

我已经看过here 的文档,并且我正在尽我所能,但我似乎无法让这个简单的示例工作。

【问题讨论】:

    标签: javascript php ajax angularjs http


    【解决方案1】:

    在 PHP 方面,您必须 echo 而不是 return 数据。

    如果你使用return语句,你会返回一些服务器级别的数据。

    所以你需要写你的数据。

    PHP

    <?php 
    
        echo 'hello world !';
    
    
     ?>
    

    success 回调中,响应是我们的原始数据。

    但是,你应该将你的 api 调用包装到一个服务中,然后你会得到:

    控制器

    (function(){
    
        function Controller(Service){
    
    
            //Our callback
            function print(data){
                console.log(data);
            }
    
            //Call service with our callback
            Service.get(print);
    
        }
    
        angular
        .module('app')
        .controller('Ctrl', Controller);
    
    })();
    

    服务

    (function(){
    
        function service($http){
    
            this.get = function(callback){
                $http.get('server.php').success(function(data){
                    callback(data);
                });
            }
    
        }
    
        angular
            .module('app')
            .service('Service', service);
    
    })();
    

    【讨论】:

    • 感谢您的回答。我有几个子问题。如果服务包含 $http 对象的依赖项,为什么控制器需要将 $http 对象列为依赖项?为什么我们还是要把它包装在一个服务中?我只需要一个控制器的响应...当您想在多个控制器之间共享数据时,您不是只使用服务吗?最后,我不知道 this.get 函数中包含的“回调”的目的和功能。为什么我们要把所有东西都包装在一个匿名函数中?
    • 控制器不需要$http 对象,这是一个错误。那么,为什么要使用 Service 呢?我们使用它是为了使代码更具可读性和模块化。但是,没错,您可以使用服务在控制器之间共享数据,因为所有 Angular 服务都是单例的。我们使用this.get中的回调函数来正确恢复我们控制器中的数据,并确保数据将被设置。
    • 啊。我认为这是我们的。我们将一个函数作为另一个函数的依赖项传递。所以,我刚刚意识到我最初遇到的问题是我在较低范围内声明了一个变量。在没有服务的情况下做这一切是多么糟糕的做法?
    • 在你的情况下,这是真的,你可以在没有服务的情况下做到这一点,因为路线不会改变,继续使用 $http 直接,没有包装器。但是包装到服务中,允许您使用参数进行调用。因此,例如,您将只有一个地方可以更改路线。正如我所说,构建服务的决定和这里的因素应该是可重用性和可读性。你也可以看看$resource
    【解决方案2】:

    $http.get 函数内部this 的含义与外部不同。你应该这样做:

    var that = this;
    $http.get("resources/php/gallery.php").success(function(response){
        that.returnData = response.data;
    });
    

    在 PHP 中您也应该使用 echo 'something',因为在 Angular 中,当您访问此 URL 时,您会获得与浏览器相同的内容

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多