2014-03-27 59 views
0

在我的控制,我调用该函数变量在返回(身份不明) - AngularJS

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; 

    }; 

}); 

但是结果我得到了警报是'未定义的'。我知道对PHP文件的调用工作正常,就好像我将'alert(msg.data)'放在承诺中一样,如上所述,然后返回正确的数组。我对此很陌生,所以原谅了任何愚蠢的问题,但似乎getQuizContent()方法返回的值是在执行PHP文件并收到msg.data之前完成的?导致未定义的变量'theResult'。

我将不胜感激任何帮助。由于

+1

如果你需要获取数据,你为什么使用$ http.post而不是$ http.get? –

+0

我的错误,仍然不起作用 – FootsieNG

回答

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); 
    }); 
} 
+0

为什么额外的'var promise'变量? –

+0

只是为了演示,展示我们如何使用诺言。 –

+0

您可以在不将它分配给另一个变量的情况下返回承诺。 –