2015-07-01 157 views
0

我試圖通過AngularJS $ http.post保存到JSON的一些表單數據,但不知何故,它不工作。這個想法很簡單:我有一個包含三個字段的表單,一個AngularJS數據綁定和一個非常簡單的PHP代碼,以將其保存到文件中。不知何故,它不工作,因爲PHP文件顯然沒有得到任何輸入,所以它總是存儲nullAngularJS不通過POST發送數據

下面是代碼:

HTML表單:

<form class="form-horizontal"> 
    <div class="form-group"> 
     <label for="title" class="col-sm-2 control-label">Title:</label> 
     <div class="col-md-4"> 
      <input type="text" class="form-control" id="title" ng-model="book.title" placeholder="Title"> 
     </div> 
    </div> 
    <div class="form-group"> 
     <label for="pages" class="col-sm-2 control-label">Pages:</label> 
     <div class="col-md-1"> 
      <input type="number" class="form-control input-sm" id="pages" ng-model="book.pages" placeholder="0"> 
     </div> 
    </div> 
    <div class="form-group"> 
     <label for="readPages" class="col-sm-2 control-label">Read pages:</label> 
     <div class="col-md-1"> 
      <input type="number" class="form-control input-sm" id="readPages" ng-model="book.readPages" placeholder="0"> 
     </div> 
    </div> 
    <button class="btn btn-primary glyphicon glyphicon-floppy-save" ng-click="save()"></button> 
</form> 

的JS代碼:

angular.module('book', [ 
    'ui.router' 
]) 
    .config(function config($stateProvider) { 
     $stateProvider.state('book', { 
      url: '/book', 
      views: { 
       "main": { 
        controller: 'Book', 
        templateUrl: 'ui/views/book.tpl.html' 
       }, 
       "header": { 
        templateUrl: 'ui/views/header.tpl.html' 
       }, 
       "footer": { 
        templateUrl: 'ui/views/footer.tpl.html' 
       } 
      }, 
      data: {pageTitle: 'Book Status'} 
     }); 
    }) 

    .controller('Book', 
    function ($scope, $http) { 
     $scope.book = {}; 
     $scope.error = ""; 

     $scope.save = function() { 
      console.log($scope.book); 
      $http.post('save/book.php', $scope.book).then(function(response) { 
       // log success 
       console.log("Guardado con éxito."); 
       console.log(response); 
       }); 
     }; 
}); 

而且PHP代碼:

$data = file_get_contents("php://input"); 
$inp = file_get_contents('../data/books.json'); 

$tempArray = json_decode($inp); 
$tempData = json_decode($data); 
array_push($tempArray, $tempData); 
$jsonData = json_encode($tempArray); 
$file = fopen('../data/books.json','w+'); 
fwrite($file, $jsonData); 
fclose($file); 
echo $jsonData; 

所以,顯然一切是正確的,但我越來越此迴應:

(! )警告:array_push()預計參數1是陣列,在C給定的零 :\瓦帕\ WWW \ angulardemos \保存\ book.php中第7行

哪個告訴我,輸入不正確,因此我實際上並沒有發送任何數據。我錯過了什麼?

+0

簡單'$ tempArray'爲空add var_dump – meda

+0

是的,我知道$ tempArray爲null,var_dump顯示爲null,但它不應該。 – Ikzer

+0

pass true'$ tempArray = json_decode($ inp,true);' – meda

回答

0

容易$tempArray爲空加的var_dump調試它

$tempArray = $tempArray = json_decode($inp, true); 
$tempData = json_decode($data); 
array_push($tempArray, $tempData); 

你還可以嘗試:

$tempArray[]=$tempData; 
0

從NG-模型中取出書,使其 <input type="text" class="form-control" id="title" ng-model="title" placeholder="Title">

同樣的所有..並在保存功能 var dataObj = { title: $scope.title, pages: $scope.pages
}
var res = $http.post('save/book.php', JSON.stringify(dataObj)