Параметры $ http get не работают


93

Кто-нибудь знает, почему это не работает?

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

и это работает:

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

Ответы:


191

Второй параметр в getвызове - это объект конфигурации. Вам нужно что-то вроде этого:

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

См Arguments раздел http://docs.angularjs.org/api/ng.$http подробнее


Обратите внимание: использование, paramsкак указано выше, также решает проблему неиспользования запросов GET data. AngularJS не будет разбираться с этим сам, как jQuery. (Я не думаю, что это хорошо или плохо, просто разные вещи могут сбить с толку).
DanielM

Я получаю значение undefined для своих свойств значения ключа внутри объекта params. Должно ли быть иначе в сервисе?
Winnemucca

2
Кроме того, когда paramsобъект пуст или все его свойства равны nullили undefined, ничего не будет добавлено в строку запроса.
nfang

3

Из $http.getдокументации второй параметр - это объект конфигурации:

get(url, [config]);

Ярлык для выполнения GETзапроса.

Вы можете изменить свой код на:

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

Или:

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

В качестве примечания, поскольку Angular 1.6 : .success больше не следует использовать , используйте .thenвместо этого:

$http.get('/url', config).then(successCallback, errorCallback);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.