Angular - 工厂http post返回未定义的值

时间:2017-05-24 17:00:59

标签: angularjs http post

我搜索和研究但我无法解决我的问题。

我不是那么有棱角的练习,我希望有人可以帮助我!

我为http POST创建了一个服务,我必须从我的控制器中获取结果

CONTROLLER

tantoSvagoApp.controller("ricercaAttivita", function ($scope, 
serviceRegioni, serviceRicercaAttivita) {

$scope.regioni = serviceRegioni.get();
var parameters = {
                "MasterID": 14,
                "NumPart": "",
                "Text": "",
                "Location": {"Region": "", "Province": ""},
                "Attributes": [],
                "Price": {"MinPrice": "","MaxPrice": ""},
                "ProjectCode": "WS678",
                "Pager": {"PageSize": 10,"PageOffset": 1}
            };

$scope.elencoAttivita = serviceRicercaAttivita.getAttivita(parameters);
});

SERVICE

tantoSvagoApp.service('serviceRicercaAttivita', function ($http) {
this.getAttivita = function(arr) { 
        $http({
              method: 'POST',
              url: 'http://localhost/Tantosvago/api/getAttivita.php',
              data: arr
         }).then(function successCallback(response) {
                var result = response.data;
                return result;
         }, function (response) {
                console.log("Errore " + response.data,response.status);
         }); 
    };
}
);

我在UNDEFINED中获得了什么。

2 个答案:

答案 0 :(得分:1)

$ http运行异步,所以当你调用你的代码时,只需拨打电话然后继续; 您可以检查它在getAttivita函数中放置一个return语句,如下所示:

this.getAttivita = function(arr) {
    $http({
              method: 'POST',
              url: 'http://localhost/Tantosvago/api/getAttivita.php',
              data: arr
         }).then(function successCallback(response) {
                var result = response.data;
                return result;
         }, function (response) {
                console.log("Errore " + response.data,response.status);
         }); 
    };

    return "Test";
}

要做你想做的事情,你需要将一个回调函数传递给tour函数,并在这个回调函数中将值赋给$ scope porperty:

在您的控制器中:

function Callback(elencoAttivita) { 
    $scope.elencoAttivita = elencoAttivita;
}

serviceRicercaAttivita.getAttivita(parameters, Callback);

并在您的服务中:

this.getAttivita = function(arr, Callback) { 
        $http({
              method: 'POST',
              url: 'http://localhost/Tantosvago/api/getAttivita.php',
              data: arr
         }).then(function successCallback(response) {
                var result = response.data;
                Callback(result);
         }, function (response) {
                console.log("Errore " + response.data,response.status);
         }); 
    };
}

答案 1 :(得分:0)

成功和失败$http.post()的回调是异步方法,您无法返回任何值。

解决方案如下

<强> CONTROLLER

tantoSvagoApp.controller("ricercaAttivita", function ($scope, 
serviceRegioni, serviceRicercaAttivita) {

$scope.regioni = serviceRegioni.get();
var parameters = {
                "MasterID": 14,
                "NumPart": "",
                "Text": "",
                "Location": {"Region": "", "Province": ""},
                "Attributes": [],
                "Price": {"MinPrice": "","MaxPrice": ""},
                "ProjectCode": "WS678",
                "Pager": {"PageSize": 10,"PageOffset": 1}
            };
function successCallBack(result) {
    $scope.elencoAttivita = result;
}

serviceRicercaAttivita.getAttivita(parameters, successCallBack);

});

<强>服务

tantoSvagoApp.service('serviceRicercaAttivita', function ($http) {
this.getAttivita = function(arr, successCallBack) { 
        $http({
              method: 'POST',
              url: 'http://localhost/Tantosvago/api/getAttivita.php',
              data: arr
         }).then(function successCallback(response) {
                successCallBack(response.data);
         }, function (response) {
                console.log("Errore " + response.data,response.status);
         }); 
    };
});