$ http obtener parámetros no funciona

93

¿Alguien sabe por qué esto no funciona?

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

y esto funciona:

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

Respuestas:

191

El segundo parámetro de la getllamada es un objeto de configuración. Quieres algo como esto:

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

Consulte la sección Argumentos de http://docs.angularjs.org/api/ng.$http para obtener más detalles.

dnc253
fuente
Tenga en cuenta que usar paramscomo se indicó anteriormente también resuelve el problema de las solicitudes GET que no se usan data. AngularJS no resolverá esto por sí mismo como lo hace jQuery. (No creo que eso sea algo bueno o malo, solo diferente y puede hacer tropezar a la gente).
DanielM
Obtengo indefinido para mis propiedades de valor clave dentro del objeto params. ¿Debería ser diferente en un servicio?
Winnemucca
2
Además, cuando el paramsobjeto está vacío, o todas sus propiedades son nullo undefined, no se agregará nada a la cadena de consulta.
nfang
3

De los $http.getdocumentos , el segundo parámetro es un objeto de configuración:

get(url, [config]);

Método de acceso directo para realizar la GETsolicitud.

Puede cambiar su código a:

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

O:

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

Como nota al margen, dado que Angular 1.6 : .success ya no debería usarse , use .thenen su lugar:

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