2017-04-12 50 views
1

我寫了一個有角度的測驗,我試圖將測驗結果發送到數據庫進行處理。我的$ http呼叫如下:Angular JSON post只發送json數組的一個項目

function saveQuiz() { 
     quizObj.isSaving = true; 
     var data = { 
      id: quiz_id, 
      action: 'quiz_data', 
      part: 'save_quiz', 
      score: quizObj.score, 
      passed: quizObj.passed, 
      completed: quizObj.completed, 
      percentage: quizObj.perc, 
      time_spent: $filter('formatTimer')(quizObj.counter), 
      questions: quizObj.quiz.questions 
     }; 
     console.log(data); 
     $http({ 
       url: quizapp.ajax_url, 
       method: "POST", 
       params: data 
      }) 
      .then(function(response) { 
        console.log(response.data); 

        quizObj.isSaving = false; 

       }, 
       function(response) { // optional 
        // failed 
        console.log(response); 
       }); 
    } 

注意我傳遞了一個json問題數組作爲quizObj.quiz.questions。 服務器端的問題是$ _POST ['questions']求值到quizObj.quiz.questions json對象的最後一項,而不是完整列表。

我在哪裏出了錯?

+0

我想這可能是因爲你正在使用'params'方法:「POST」'。嘗試在你的'$ http'配置對象上說'data:data'而不是params,看看它是否適用於你。 – mhodges

+0

數據:數據完美。感謝mhodges我拉着頭髮 –

+0

哦,我的天哪,你不知道我做了多少次同樣的事情!哈哈很高興爲你工作!我將爲未來的訪問者發佈一個答案 – mhodges

回答

0

當使用通過角的$http服務,data去與method: "POST"params去與method: "GET"

更改你的配置對象的屬性要傳遞到$http服務,像這樣:

$http({ 
    url: quizapp.ajax_url, 
    method: "POST", 
    data: data // <-- data here, not params since using POST 
}).then(function() { /*...*/ })); 
+0

我的$ _POST和$ _REQUEST變量在服務器端返回null –

+0

@TommyAdeniyi [查看此問題和解答](http://stackoverflow.com/questions/15485354/angular-http-post-to-php-and-undefined)並且讓我知道這些是否適合你 – mhodges

+1

將這段代碼添加到我的serverside文件的頂部有訣竅: if($ _SERVER [ REQUEST_METHOD'] =='POST'&& empty($ _ POST)) $ _POST = json_decode(file_get_contents('php:// input'),true); –