Salut, j'ai un problème avec la réponse de l'appel $ .post.

Je voudrais insérer dans un tableau des données avec angulaire. La date correspond à la réponse de l'appel php. J'appelle php avec:

function AppCtrl($scope){
   $scope.seeTable = function(){
     $.post("/testJson.php", function(json){
       //setResponse(json); 
         $scope.contacts = json;
     });
   $scope.seeThisTable = !$scope.seeThisTable;
};
//Not working
function setResponse(json){
  $scope.contacts = json;
}

Puis j'insère dans le tableau:

 <tbody>
  <tr ng-repeat="contact in contacts">
   <td> {{contact.name}} </td>
   <td> {{contact.phone}} </td>
  </tr>
 </tbody>

Mon php est:

<?php
$array = array(
            0 => array('name' => 'Peter',
                       'phone' => '555-5552'),
            1 => array('name' => 'Jhon',
                       'phone' => '555-1235'),
            2 => array('name' => 'Ron',
                       'phone' => '555-5122'),
            3 => array('name' => 'Harry',
                       'phone' => '555-5514')
         );

echo json_encode($array);
?>

Mais $ scope.contacts est vide. Le problème est d'extraire la réponse de $ .post (), mais quand j'essaye de sortir json pour fonctionner, $ .post () est toujours vide. J'essaie d'appeler une autre fonction et de passer json à l'intérieur mais ne fonctionne pas, à l'intérieur de la fonction setResponse, les json sont correctement mais ne définissez pas $ scope.contacts, après la fin de la fonction $ scope.contacts sont vides.

Il existe un moyen d'extraire la réponse?

Merci!

0
Fabrizio Franzè 15 janv. 2017 à 13:41

2 réponses

Meilleure réponse

Utilisez un service $http angulaire comme celui-ci.

function AppCtrl($scope,$http){
   $scope.seeTable = function(){
    $http({
            method:'GET',
            url:'/testJson.php'
        }).then(function  success(data,status,xhr){
            $scope.contacts = data.data;
            //console.log(data);
        },
        function error(data,status,xhr){
            alert(data.status);
        }
        }); 
}

ET partie HTML

<tbody>
  <tr ng-repeat="contact in contacts">
   <td> {{contact['name']}} </td>
   <td> {{contact['phone']}} </td>
  </tr>
 </tbody>
0
Hikmat Sijapati 15 janv. 2017 à 10:52

Le problème est que vous quittez la portée angulaire lorsque vous appelez $ .post. C'est JQuery.

Solutions:

1) utilisez le service $ http fourni par angular

2) vous pouvez l'appeler dans la méthode post-réponse.

$timeout(function () {
   $scope.contacts = json
});

Ou vous pouvez appeler $ scope. $ apply

0
Andrei Neagu 15 janv. 2017 à 10:46