J'apprends donc Angular, et j'aimerais faire une application web qui consomme un service Web Restful. Donc ma page ressemble à ceci:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html ng-app="Tripeew">
    <head>
        <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Tripeew</title>
    </head>
    <body ng-controller="region">
        <h1>Hello World !!</h1>
             <p>Id : {{All.id}}</p> 
             <p>Nom :{{All.nom}}</p>
             <br/>
        <script type="text/javascript">
            var myapp = angular.module('Tripeew',[]);
            myapp.controller('region',function($scope,$http){
                $http.get('http://localhost:9090/Tripeew_V1.0/webresources/tripeewws.regions/3').succes(function(){
                    $scope.All = response.data ; 
                });
            });
        </script>
    </body>
</html>

Mais je ne peux pas avoir le résultat du ws, qui fonctionne via URL, tout ce que je reçois est le suivant:

Hello World !!

Id : {{All.id}}

Nom :{{All.nom}}
1
Mehdi Bajjou 12 avril 2018 à 23:51

3 réponses

Meilleure réponse

Utilisez cette syntaxe:

$http.get('http://localhost:9090/Tripeew_V1.0/webresources/tripeewws.regions/3').then(function(response) {
    $scope.All = response.data ;
});

Une erreur s'est produite car la version AngularJS utilisée par l'auteur est 1.6.9, mais success()/error() a été supprimée dans la version 1.6.0-rc.0 ( voir Changelog ).

RUPTURE DU CHANGEMENT:

Les méthodes de rappel personnalisées obsolètes de $http - success() et error() - ont été supprimés. Vous pouvez utiliser la norme then() / catch() méthodes de promesse à la place, mais notez que la méthode les signatures et les valeurs de retour sont différentes.

success(fn) peut être remplacé par then(fn) et error(fn) peut être remplacé par then(null, fn) ou catch(fn).

Avant:

$http(...).
  success(function onSuccess(data, status, headers, config) {
    // Handle success
    ...
  }).
  error(function onError(data, status, headers, config) {
    // Handle error
    ...
  });

Après:

$http(...).
  then(function onSuccess(response) {
    // Handle success
    var data = response.data;
    var status = response.status;
    var statusText = response.statusText;
    var headers = response.headers;
    var config = response.config;
    ...
  }, function onError(response) {
    // Handle error
    var data = response.data;
    var status = response.status;
    var statusText = response.statusText;
    var headers = response.headers;
    var config = response.config;
    ...
  });

// or

$http(...).
  then(function onSuccess(response) {
    // Handle success
    var data = response.data;
    var status = response.status;
    var statusText = response.statusText;
    var headers = response.headers;
    var config = response.config;
    ...
  }).
  catch(function onError(response) {
    // Handle error
    var data = response.data;
    var status = response.status;
    var statusText = response.statusText;
    var headers = response.headers;
    var config = response.config;
    ...
  });

Remarque: il existe une différence subtile entre les variations présentées ci-dessus. Lorsque vous utilisez $http(...).success(onSuccess).error(onError) ou $http(...).then(onSuccess, onError), le onError() rappel sera gérer uniquement les erreurs / rejets produits par l'appel $http(). Si la onSuccess() le rappel produit une erreur / rejet, il ne sera pas géré par onError() et peut passer inaperçu. En revanche, lors de l'utilisation $http(...).then(onSuccess).catch(onError), onError() gérera erreurs / rejets produits par $http() et onSuccess().

1
Roman Cherepanov 12 avril 2018 à 21:28

Eh bien, il y a deux problèmes avec votre code. Le premier est évident car tout le monde vous a dit de corriger la faute de frappe de sucess à success et deuxièmement, vous ne transmettez pas de réponse à votre fonction de gestionnaire que vous avez écrite avec succès. Je veux dire que vous devez transmettre les données comme .success((response)=> $scope.All = response.data).

Remarquez, je passe response au succès de rappel.

De plus, il vaut mieux utiliser la syntaxe suivante pour faire des http requêtes avec angularjs

   $http({
     method: 'GET',
    url: '/someUrl'
      }).then(function successCallback(response) {
      // this callback will be called asynchronously
      // when the response is available
     }, function errorCallback(response) {
     // called asynchronously if an error occurs
     // or server returns response with an error status.
    });
0
George Bailey 12 avril 2018 à 21:10

La syntaxe success est obsolète depuis Angular 1.4.3. Si vous utilisez une version plus récente d'Angular, vous devez utiliser la syntaxe then.

0
Timovski 12 avril 2018 à 20:59