$ http get parameters não funciona

93

Alguém sabe por que isso não funciona?

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

e isso funciona:

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

Respostas:

191

O segundo parâmetro na getchamada é um objeto de configuração. Você quer algo assim:

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

Consulte a seção Argumentos de http://docs.angularjs.org/api/ng.$http para obter mais detalhes

dnc253
fonte
Observe que usar paramscomo acima também resolve o problema de não usar solicitações GET data. O AngularJS não resolverá isso sozinho como o jQuery faz. (Eu não acho que isso seja uma coisa boa ou ruim, apenas diferente e pode enganar as pessoas).
DanielM
Estou ficando indefinido para minhas propriedades de valor-chave dentro do objeto params. Isso deveria ser diferente em um serviço?
Winnemucca de
2
Além disso, quando o paramsobjeto está vazio, ou todas as suas propriedades são nullou undefined, nada será adicionado à string de consulta.
nfang
3

No $http.getdocs , o segundo parâmetro é um objeto de configuração:

get(url, [config]);

Método de atalho para realizar a GETsolicitação.

Você pode alterar seu código para:

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

Ou:

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

Como uma observação lateral, como Angular 1.6 : .success não deve ser mais usado , use em .thenvez disso:

$http.get('/url', config).then(successCallback, errorCallback);
Mistalis
fonte