AngularJS - 为什么我不能通过$ http.get获取JSON?

时间:2016-12-06 05:54:22

标签: javascript angularjs firefox

我正在使用NetBeans在Java中开发Web应用程序 使用AngularJS。

当我在localhost中访问我的WebService时,我正在获取包含我需要的对象的JSON数组,工作得非常好

BUT

在控制器中,我没有收到信息

Web浏览器的日志:

  

结果:[object Object] OR {} script.js:140:5

     

成功/错误:未定义

代码:

minhaAplicacao.controller('inicioPacienteCTRL', function ($scope, $http) {
    $scope.medicoSelecionado;

    var aux;
    var $scope.result = window.console.log($http.get("http://localhost:8080/Clinica5/webresources/medicos")).then(function (success) {
        aux = success;
    }, function (error) {
        aux = error;
    });

    window.console.log("Result: "+$scope.result+ "  OR  "+JSON.stringify($scope.result));
    window.console.log("Success/Error: "+aux);
});

如果我把这段代码放在视图中,我就会收到错误:

<div ng-bind="$scope.result"></div>
  

错误:$ scope.result未定义

我已配置$ routeProvider并且绝对正确

非常感谢&lt; 3 Big Hug!

5 个答案:

答案 0 :(得分:1)

您可以尝试以下方式。

minhaAplicacao.controller('inicioPacienteCTRL', function ($scope, $http) {

    $scope.functionName = function(){
        //define
        $scope.medicoSelecionado = {};  
        $http.get("http://localhost:8080/Clinica5/webresources/medicos").then(function (success) {
            console.log(success);
            //success data passed 
            $scope.medicoSelecionado = success;

        }, function (error) {
            console.log(error);
            //error message
            $scope.error = error;
        });

    }
});

并使用此html显示错误

<div class="error">{{error}}</div>

答案 1 :(得分:0)

您需要根据asynch请求(例如

)将响应分配给控制器范围变量结果
 $scope.result = success

MoreOver你可以在声明$ scope变量时避免使用var

minhaAplicacao.controller('inicioPacienteCTRL', function ($scope, $http) {
$scope.medicoSelecionado;

$scope.aux = {};
$scope.result {}; 
$http.get("http://localhost:8080/Clinica5/webresources/medicos").then(function (success) {
    $scope.result = success;
}, function (error) {
    $scope.aux = error;
});

window.console.log("Result: ",$scope.result, "  OR  ",JSON.stringify($scope.result));
window.console.log("Success/Error:",$scope.aux);

});

也在视野中

 <div ng-bind="result"></div>

不需要$ scope

答案 2 :(得分:0)

尝试<div ng-model="result"></div>第二个错误。

没有必要这样做:

$scope.medicoSelecionado;
$scope.aux;
$scope.result;

只需在需要时使用新模型;不需要声明。

根据Vinod Louis的建议,在.then()中执行$scope.result = success应该没问题。

我会这样做:

minhaAplicacao.controller('inicioPacienteCTRL', function ($scope, $http) {

    $http.get("http://localhost:8080/Clinica5/webresources/medicos")

    .then(function (success) {
                $scope.result = success;
            }, function (error) {
                $scope.result = error;
            });

    window.console.log("Result: "+$scope.result+ "  OR  "+JSON.stringify($scope.result));

});

顺便说一下,aux做了什么?

答案 3 :(得分:0)

您必须定义var aux = {}因为如果您没有定义任何内容,那么它将显示未定义的 并且您正在成功获得对象,以便显示[object, object]

minhaAplicacao.controller('inicioPacienteCTRL', function ($scope, $http) {
$scope.medicoSelecionado;

var aux = {};
var $scope.result = window.console.log($http.get("http://localhost:8080/Clinica5/webresources/medicos")).then(function (success) {
    aux = success;
}, function (error) {
    aux = error;
});

window.console.log("Result: "+$scope.result+ "  OR  "+JSON.stringify($scope.result));
window.console.log("Success/Error: "+aux);
});

答案 4 :(得分:0)

GOT!

出于某种原因与路线“登录”发生冲突。我不知道为什么。

解决方案是删除redirectTo行

when('/inicioMedico', {
     templateUrl: 'inicioMedico.html',
     controller: "inicioMedicoCTRL"
}).
otherwise ({
    // redirectTo: 'login' ERROR HERE
});