$ http get paramètres ne fonctionne pas


93

Est-ce que quelqu'un sait pourquoi cela ne fonctionne pas?

$http
    .get('accept.php', {
        source: link,
        category_id: category
    })
    .success(function (data, status) {
        $scope.info_show = data
    });

et cela fonctionne:

$http
    .get('accept.php?source=' + link + '&category_id=' + category)
    .success(function (data, status) {
        $scope.info_show = data
    });

Réponses:


191

Le 2ème paramètre de l' getappel est un objet de configuration. Vous voulez quelque chose comme ça:

$http
    .get('accept.php', {
        params: {
            source: link,
            category_id: category
        }
     })
     .success(function (data,status) {
          $scope.info_show = data
     });

Voir la section Arguments de http://docs.angularjs.org/api/ng.$http pour plus de détails


Notez paramsque l' utilisation de la méthode ci-dessus résout également le problème des requêtes GET qui n'utilisent pas data. AngularJS ne réglera pas cela lui-même comme le fait jQuery. (Je ne pense pas que ce soit une bonne ou une mauvaise chose, juste différent et peut faire trébucher les gens).
DanielM

Je deviens indéfini pour mes propriétés de valeur clé à l'intérieur de l'objet params. Cela devrait-il être différent dans un service?
Winnemucca

2
De plus, lorsque l' paramsobjet est vide ou que toutes ses propriétés sont nullou undefined, rien ne sera ajouté à la chaîne de requête.
nfang

3

À partir de la $http.getdocumentation , le deuxième paramètre est un objet de configuration:

get(url, [config]);

Méthode de raccourci pour exécuter la GETdemande.

Vous pouvez changer votre code pour:

$http.get('accept.php', {
    params: {
        source: link, 
        category_id: category
    }
});

Ou:

$http({
    url: 'accept.php', 
    method: 'GET',
    params: { 
        source: link, 
        category_id: category
    }
});

En remarque, puisque Angular 1.6 : .success ne devrait plus être utilisé , utilisez à la .thenplace:

$http.get('/url', config).then(successCallback, errorCallback);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.