代码之家  ›  专栏  ›  技术社区  ›  KyleM

PHP和Angular$http ajax的问题

  •  1
  • KyleM  · 技术社区  · 9 年前

    因此,用户使用一个日期选择器输入,其值是通过ajax发送到PHP的值,PHP将返回一个包含 $anoArray 在下面

    第一个问题: ajax只能使用jquery成功;使用angular$http返回 "DATA WASNT AN INT" 如下所示(这甚至是在设置许多人之前发布的标头时)……最终我想使用原生的angular$http服务。我下面的内容确实返回了数据,但留给我的是第二个问题。

    第二个问题: 我希望做各种事情,比如对对象进行排序,并在返回数据后将某些key:value值设置为变量,但我似乎无法以能够这样的格式返回数据。 注*我是编程新手(六个月自学),感谢您的帮助。

    应返回的内容:

    [
    {"nameF":"harry","nameL":"chicken","start":"1456790450","end":"1456790490","location":"Station 1","comments":"these are comments"},
    {"nameF":"johnny","nameL":"appleseed","start":"1456790450","end":"1456790490","location":"Station 1","comments":"these are comments"}
    ]
    

    我的角度控制器:

    app.controller('scheduleController', ['$scope', '$window', function($scope, $window) {
        $scope.shifts = [];
        $scope.shiftAjax = function(){
            var x = $('#scheduleDate').val();
            $.ajax({
                method: 'post',
                url: 'getSchedule.php',
                data: {scheduleDate: x},    
            })
            .done(function(response){
    $scope.shifts = response;
    console.log(response);
    
            });
        }
    }]);
    

    控制台日志显示了我期望的数据,但我不能将其用作javascript对象进行迭代,如果将.done更改为:$scope。轮班= $scope.shifts = JSON.parse(response); 然后我就得到了一个控制台 [object Object] 我仍然无法迭代或从中获取key:values。

    PHP帖子url(getSchedule.PHP):

    <?php
      $startTime = strtotime($_POST['scheduleDate']);
      include_once('../../classes/scheduler.php');
      if(is_int($startTime)){
    
        $var = new scheduler; //SENT TO classes/scheduler.php
        $jsonArray = $var->getSchedule($startTime); 
    
      }else{
        echo "DATA WASNT AN INT";
      };?>
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   KyleM    9 年前

    几个小时的在线让我找到了这个解决方案……最后:

    控制器:

    app.controller('scheduleController', ['$scope', '$window', '$http', function($scope, $window, $http) {
        $scope.shifts = [];
        $scope.shiftAjax = function(){
            $http({
                url: 'getSchedule.php',
                method: 'POST',
                data: $.param({'scheduleDate': $scope.input}),
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            })
            .then( function(response) {
                $scope.result = response.data;
            }, function () {
                console.log('ERROR: ANGULAR AJAX FAILED');
            });
        }
    }]);
    

    这部分的解决方案是设置$。参数与标题一起正确。

    PHP发布url(getSchedule.PHP):

    <?php
      $data = $_POST['scheduleDate'];
      $startTime = strtotime($data);
      include_once('scheduler.php');
      if(is_int($startTime)){
        $var = new scheduler;
        $jsonArray = $var->getSchedule($startTime);
      }else{
        echo " DATA WASNT AN INT";
      };
    ?>
    

    不确定原因,但将 $_POST 在调用之前在单独的变量中 strtotime() 正是踢球者解决了这个问题。

    现在返回的是:

    [
    0:{"nameF":"harry","nameL":"chicken","start":"1456790450","end":"1456790490","location":"Station 1","comments":"these are comments"},
        1:{"nameF":"johnny","nameL":"appleseed","start":"1456790450","end":"1456790490","location":"Station 1","comments":"these are comments"}
    ]
    

    现在我可以通过在 .then 例如:

     $scope.result[0].start //which returns 1456790450