变量未被返回(未识别) - AngularJS

时间:2014-03-27 23:37:07

标签: javascript php angularjs promise single-page-application

在我的控制器中,我正在调用函数

function initialiseQuizContent(quizIdArray){
   alert(getQuizService.getQuizContent(quizIdArray));
}

调用以下服务中的方法

app.service('getQuizService', function($http) {

    var quizArray;

    this.setQuizArray = function(quiz){
        quizArray = quiz;
    };

   this.getQuizArray = function(){
        return quizArray;
    };

    this.getQuizContent = function(quizArray){

        var $promise=$http.get("http://localhost/PHP/getQuizContent.php", {'quizArray': quizArray}); //send data to addQuiz.php
        var theReturn;
        $promise.then(function(msg){

            //alert(msg.data);
            theReturn = msg.data;
        });

        return theReturn;

    };

});

然而,我获得警报的结果是“未定义的”#39;。我知道对PHP文件的调用工作得很好,好像我放了警告(msg.data)'在承诺中,如上所述,然后返回正确的数组。我是新手,所以请原谅任何愚蠢的问题,但看起来似乎是为了获得' getQuizContent()'方法是在执行PHP文件并收到msg.data之前完成的?导致未定义的变量' theResult'。

我将不胜感激任何帮助。感谢

1 个答案:

答案 0 :(得分:2)

使用$http服务意味着使用AJAX,响应是异步的,为什么你得undefined,我建议你改变你的服务并做这样的事情:

app.service('getQuizService', function($http) {

    var quizArray;

    this.setQuizArray = function(quiz){
        quizArray = quiz;
    };

   this.getQuizArray = function(){
        return quizArray;
    };

    this.getQuizContent = function(quizArray){

        var promise=$http.post("http://localhost/PHP/getQuizContent.php",
         {'quizArray': quizArray}).then(function (response) {

        console.log(response);

        return response.data;
      });

        return promise;

    };});

然后在控制器中执行以下操作:

function initialiseQuizContent(quizIdArray){
     getQuizService.getQuizContent(quizIdArray).then(function(data){
     alert(data);
    });
}