2015-02-10 67 views
0

我收到服務中的數據,但我收到的數據爲未定義。我的AngularJS服務返回數據,但我收到未定義AngularJS服務延遲發送數據

我的服務代碼:

myApp.service("studentinfo", function ($http) { 
    var studentlist = []; 

    this.GetStudentList = function() { 

    $.getJSON("/Home/GetStudentsList", function (data) { 
     if (data.Result == "OK") { 
     studentlist = data.Data; 
     } 
     else { 
     studentlist = []; 
     } 
    }).complete(function() { 
     return studentlist; 
    }); 
    }; 
}); 

我的控制器代碼:

myApp.controller("studentcontroller", function ($scope, $http, studentinfo) { 
    $scope.StudentList = []; 

    function LoadStudentRecord(){ 
    $scope.StudentList = studentinfo.GetStudentList(); 
    } 

    LoadStudentRecord(); 
}); 
+0

我得到的數據正確..我想我直接調用contoller(studentinfo.GetStudentList();)中的方法並收到輸入是問題... – Vicky 2015-02-10 10:04:39

回答

4

你混合幾件事情在這裏,提到:

  1. 你似乎正在使用jQuery($.getJSON) - 我建議你試着留在角落$http(你注入的方式)。所以嘗試使用$ http.GET(https://docs.angularjs.org/api/ng/service/ $ http)。
  2. 請記住,這將返回一個承諾。您可能確實希望從您的服務中返回一個承諾,以便您可以在控制器中決定如何處理失敗的情況。
  3. 我建議使用不同的方式來實例化您的服務和控制器,請參閱下面的示例。這允許您稍後縮小您的代碼。

代碼:

var app = angular.module('myapp', []); 
app.service('studentservice', ['$http', function ($http) { 
    getStudentList = function() { 
     return $http.get('/Home/GetStudentsList'); 
    }; 
    return { 
     getStudentList: getStudentList 
    } 
}]); 

app.controller('studentcontroller', ['$scope', 'studentservice', function ($scope, studentservice) { 
    $scope.StudentList = []; 

    function LoadStudentRecord() { 
     $scope.StudentList = studentservice.getStudentList() 
      .success(function (data, status, headers, config) { 
       $scope.StudentList = data; 
     }) 
      .error(function (data, status, headers, config) { 
       console.log(data) 
     }); 
    } 
    LoadStudentRecord(); 
}]); 
+0

謝謝秒殺...方式是由服務定義是錯誤的......現在我明白了......謝謝onceagain .. – Vicky 2015-02-10 10:29:53

+0

不客氣 - 希望它有幫助。 – 2015-02-10 10:33:12

+0

真的很有幫助...我是一個初學者angularjs – Vicky 2015-02-10 10:43:08

3

我看你注入$ HTTP,但你不使用它。用$ http替換jQuery方法。 $ HTTP將返回一個承諾和控制器,你可以更新任何承諾方法的模型(然後,趕,終於)

+0

甚至返回是在一個方法完整的方法。該服務不會返回任何東西。那你爲什麼不明白 – Raulucco 2015-02-10 10:10:01

+0

$ http.get適用於jsonresult數據...? – Vicky 2015-02-10 10:12:25

+0

是的,看看文檔。您可以使用任何方法發佈,獲取,修補,刪除...並且您可以指定您的應用所需的數據類型。我認爲默認是json。 – Raulucco 2015-02-10 10:15:00

1
function studentFunction ($http) { 
    var studentlist = []; 
    this.GetStudentList = function() { 
    return $http.get("/Home/GetStudentsList"); 
    }; 

} 

myApp.service("studentinfo", studentFunction); 
myApp.controller("studentcontroller", function ($scope, studentinfo) { 

    $scope.StudentList = []; 

    function LoadStudentRecord(){ 
    studentinfo.GetStudentList().then(function (respoonse) { 
    $scope.StudentList = respoonse; 
    }); 
} 

LoadStudentRecord(); 

});

該服務應該看起來像這樣。你在你的控制器中使用諾言。

+0

謝謝...真的對開胃菜有幫助 – Vicky 2015-02-10 10:42:16