【问题标题】:$http.get succeeds; but can't access output?$http.get 成功;但无法访问输出?
【发布时间】:2014-05-03 10:13:24
【问题描述】:

如何从远程服务器获取输出? - Firebug 确认 JSON 输出是正确的。

这是我的尝试,我尽量做到标准(Plnkr):

app.js、controllers.js、factories.js

'use strict';

var nameVersionFactory = angular.module('name.factories.version', []);

nameVersionFactory.factory('Version', ['$q', '$http', function ($q, $http) {
    var d = $q.defer();
    $http.get('/api').then(function (response) {
        d.resolve(response);
    });

    return d.promise;
}]);

var nameVerCtrl = angular.module('name.controllers.version',
                                 ['name.factories.version']);

nameVerCtrl.controller(
    'verCtrl', ['$scope', 'Version', function ($scope, Version) {
        $scope.version = Version;  /* {'status': 'online',
                                       'rest_api_version': '1.1.14',
                                       'server_time': '…'} */
    }]
);

var nameApp = angular.module('name', ['name.controllers.version']);

/* CORS */
nameApp.config(['$httpProvider', function($httpProvider) {
    $httpProvider.defaults.useXDomain = true;
    delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);

Python REST API(30 行):https://gist.github.com/anonymous/7d34867aca543911a06f

index.html

<!DOCTYPE html>
<html xmlns:ng="http://angularjs.org" id="ng-app" ng-app="name" lang="en">
    <head>
        <meta charset="utf-8">
    </head>

    <body>
        <div data-ng-controller="verCtrl">
            <pre>{{version | json}}</pre>
            <pre>{{version.status}}</pre>
            <pre>{{version.data | json}}</pre>
            <pre>{{version.data.status}}</pre>
        </div>

        <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js">
        </script>
        <script src="scripts/controllers.js"></script>
        <script src="scripts/factories.js"></script>
        <script src="scripts/app.js"></script>
    </body>
</html>

不幸的是,我在这些 &lt;pre&gt;…&lt;/pre&gt; 标记中没有得到任何 JSON 输出。

【问题讨论】:

    标签: javascript json angularjs angularjs-scope promise


    【解决方案1】:

    在 Angular 1.2+ 中,Promise 不再由作用域变量自动解包。

    所以,你必须这样做:

    Version().then(function(result){
        $scope.version = result;    
    });
    

    此外,$http 已经返回了 Promise,所以:

    var d = $q.defer();
    $http.get('/api').then(function (response) {
        d.resolve(response);
    });
    
    return d.promise;
    

    可以简单地变成:

    return $http.get("/api");
    

    【讨论】:

    • 谢谢,但这仍然不起作用。公众号:plnkr.co/edit/UNGeKSSgCGTUnxJuDns4?p=preview
    • @AT 你的角度没有正确引导,所以你的控制器没有运行。从那以后你能解决这个问题吗?
    • @AT 在这种情况下,请考虑接受答案或编写自己的答案,以帮助未来的观众查看此问题。
    猜你喜欢
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2017-07-02
    • 1970-01-01
    相关资源
    最近更新 更多