Параметри $ 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

2-м параметром у getвиклику є об'єкт config. Ви хочете щось подібне:

$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

Я отримую невизначене для моїх властивостей ключового значення всередині об’єкта 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.