$ 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.