AngularJS передает данные в запрос $ http.get

У меня есть функция, которая выполняет HTTP-запрос POST. Код указан ниже. Это нормально работает.

 $http({
   url: user.update_path, 
   method: "POST",
   data: {user_id: user.id, draft: true}
 });

У меня есть еще одна функция для http GET, и я хочу отправить данные по этому запросу. Но у меня нет такой возможности.

 $http({
   url: user.details_path, 
   method: "GET",
   data: {user_id: user.id}
 });

Синтаксис для http.get:

get (url, config)


person Chubby Boy    schedule 07.12.2012    source источник


Ответы (7)


Запрос HTTP GET не может содержать данные для отправки на сервер. Однако вы можете добавить в запрос строку запроса.

angular.http предоставляет для него параметр params.

$http({
    url: user.details_path, 
    method: "GET",
    params: {user_id: user.id}
 });

См. http://docs.angularjs.org/api/ng.$http#get и https://docs.angularjs.org/api/ng/service/$http#usage (показывает параметр params)

person fredrik    schedule 07.12.2012
comment
это вернет обещание - person Connor Leech; 11.03.2014
comment
Код с обещанием: $ http ({method: 'GET', url: '/ someUrl'}). success (function (data, status, headers, config) {// этот обратный вызов будет вызываться асинхронно // когда ответ будет доступен}). error (function (data, status, headers, config) {// вызывается асинхронно, если возникает ошибка // или сервер возвращает ответ со статусом ошибки.}); - person Ehud Grand; 01.09.2014
comment
Angular также предоставляет функции $http.get(url.details_path, {params: {user_id: user.id}}). - person enpenax; 29.05.2015
comment
Этот подход не позволяет отправлять сложные объекты - person Vil; 12.11.2015
comment
Было бы неплохо, чтобы ключ объекта согласовывался между HTTP-глаголами ... наличие данных для POST и параметров для GET противоречит здравому смыслу. - person Hubert Perron; 09.03.2016
comment
Я не понимаю здесь документацию по Angular. в нем говорится, что $http.get() может включать объект конфигурации, но никакая ссылка не дается, объясняя, что вообще должен включать объект конфигурации ....... - person phil294; 27.07.2016
comment
@HubertPerron На самом деле это не противоречит интуиции, поскольку это разные вещи: DATA может представлять объект / модель, даже вложенную, и становится частью заголовка POST ... PARAMS представляют, что вы можете добавить к URL-адресу GET, где каждое свойство представляет собой часть строки запроса в URL-адресе. Хорошо, что у них другое название, потому что это дает вам понять, что вы делаете что-то другое. - person Jos; 09.11.2016
comment
Спасибо, Фредрик :) - person Deepak Pathak; 24.02.2017
comment
@HubertPerron также не забывайте, что запрос POST может иметь как данные, так и параметры запроса. - person gilad mayani; 06.03.2018
comment
Работает Angular 1.3.2 - person sg28; 07.03.2018

Вы можете передавать параметры напрямую $http.get(). Следующее работает нормально

$http.get(user.details_path, {
    params: { user_id: user.id }
});
person Rob    schedule 29.08.2013
comment
Это работает, но объект params преобразуется в String. Как сохранить исходный объект? - person wdphd; 02.03.2015
comment
@wdphd HTTP-протоколу свойственно то, что он будет закодирован в строку запроса. - person Uli Köhler; 08.03.2015
comment
@Uli Köhler: Ага, пропустил. Я думал о маршрутизаторе пользовательского интерфейса, где вы можете указать тип данных params. Исправлено это с помощью простого parseInt на бэкэнде. - person wdphd; 09.03.2015
comment
Это правильное решение, если вы хотите добавить параметры GET к данному URL-адресу и отлично работает. - person enpenax; 29.05.2015
comment
Некоторых коллег беспокоит длина URL-адреса, действительно ли это проблема? - person Juan; 24.12.2015
comment
@Juan, stackoverflow.com/questions/417142/ - person Rob; 24.12.2015

Начиная с AngularJS v1.4.8, вы можете использовать < strong> get(url, config) следующим образом:

var data = {
 user_id:user.id
};

var config = {
 params: data,
 headers : {'Accept' : 'application/json'}
};

$http.get(user.details_path, config).then(function(response) {
   // process response here..
 }, function(response) {
});
person Arpit Aggarwal    schedule 28.12.2015
comment
Но этих данных все еще нет в теле запроса. - person naXa; 02.08.2016
comment
@naXa GET должен быть параметром url только по соглашению, поэтому многие фреймворки не позволяют применять передовой опыт, даже если технически это может работать и иметь смысл. - person Christophe Roussy; 29.05.2017
comment
Если бы только документация AngularJS могла предоставить этот простой пример! - person Norbert Norbertson; 27.11.2017
comment
@Arpit Aggarwal, не могли бы вы взглянуть на мой аналогичный вопрос с веб-сервером golang и vue.js? stackoverflow.com/questions/61520048/ - person user2315094; 30.04.2020

Решение для тех, кто заинтересован в отправке параметров и заголовков в запросе GET

$http.get('https://www.your-website.com/api/users.json', {
        params:  {page: 1, limit: 100, sort: 'name', direction: 'desc'},
        headers: {'Authorization': 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}
    }
)
.then(function(response) {
    // Request completed successfully
}, function(x) {
    // Request error
});

Пример полного сервиса будет выглядеть так

var mainApp = angular.module("mainApp", []);

mainApp.service('UserService', function($http, $q){

   this.getUsers = function(page = 1, limit = 100, sort = 'id', direction = 'desc') {

        var dfrd = $q.defer();
        $http.get('https://www.your-website.com/api/users.json', 
            {
                params:{page: page, limit: limit, sort: sort, direction: direction},
                headers: {Authorization: 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}
            }
        )
        .then(function(response) {
            if ( response.data.success == true ) { 

            } else {

            }
        }, function(x) {

            dfrd.reject(true);
        });
        return dfrd.promise;
   }

});
person Subodh Ghulaxe    schedule 11.12.2015
comment
Как данные ответа будут использоваться в контроллере? Спасибо. - person Floris; 05.01.2017

Вы даже можете просто добавить параметры в конец URL-адреса:

$http.get('path/to/script.php?param=hello').success(function(data) {
    alert(data);
});

В паре со script.php:

<? var_dump($_GET); ?>

В результате появляется следующее предупреждение javascript:

array(1) {  
    ["param"]=>  
    string(4) "hello"
}
person Jeffrey Roosendaal    schedule 25.09.2014
comment
$ http выполняет экранирование? - person Michael Cole; 17.10.2014
comment
Это тоже работает, но проблема в том, что, когда у вас есть несколько параметров, становится больно добавлять их в конец URL-адреса, плюс если вы измените имя переменной, вы должны прийти и также изменить его в URL-адресе. - person user3718908; 29.07.2015
comment
Я знаю. Это была скорее демонстрация, показывающая, что вы можете делать это обычным способом, я не обязательно рекомендую это. (Где «обычный способ» означает, как вы, вероятно, годами делали это с php) - person Jeffrey Roosendaal; 30.07.2015

Вот полный пример HTTP-запроса GET с параметрами с использованием angular.js в ASP.NET MVC:

КОНТРОЛЛЕР:

public class AngularController : Controller
{
    public JsonResult GetFullName(string name, string surname)
    {
        System.Diagnostics.Debugger.Break();
        return Json(new { fullName = String.Format("{0} {1}",name,surname) }, JsonRequestBehavior.AllowGet);
    }
}

ПРОСМОТР:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
<script type="text/javascript">
    var myApp = angular.module("app", []);

    myApp.controller('controller', function ($scope, $http) {

        $scope.GetFullName = function (employee) {

            //The url is as follows - ControllerName/ActionName?name=nameValue&surname=surnameValue

            $http.get("/Angular/GetFullName?name=" + $scope.name + "&surname=" + $scope.surname).
            success(function (data, status, headers, config) {
                alert('Your full name is - ' + data.fullName);
            }).
            error(function (data, status, headers, config) {
                alert("An error occurred during the AJAX request");
            });

        }
    });

</script>

<div ng-app="app" ng-controller="controller">

    <input type="text" ng-model="name" />
    <input type="text" ng-model="surname" />
    <input type="button" ng-click="GetFullName()" value="Get Full Name" />
</div>
person Denys Wessels    schedule 18.05.2016
comment
IMHO Синтаксис с params менее подвержен ошибкам, чем "ручной" URL-адрес concat - person Christophe Roussy; 29.05.2017

Для отправки запроса на получение с параметром я использую

  $http.get('urlPartOne\\'+parameter+'\\urlPartTwo')

Таким образом, вы можете использовать свою собственную строку URL

person moin khan    schedule 30.03.2016