2015-07-01 165 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)