2014-03-27 54 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

您可以在不將它分配給另一個變量的情況下返回承諾。 –