AngularJS — отправить запрос $http GET с параметрами ассоциативного массива

с помощью этого кода я пытаюсь отправить запрос $http.get в свою службу отдыха:

$http({
    method: 'GET',
    url: '/api/item/all',
    params: {
        query: {
            userid: 7
        },
        fields: 'title'
    }
});

Я ожидал получить доступ к этому URL:

/api/item/all?query[userid]=7&fields=title

но я всегда получаю неверный URL...

Итак, как действовать?

Или еще лучше: можно ли передать полный URL-адрес запроса в параметр URL-адреса $http?


person donnikitos    schedule 11.07.2014    source источник
comment
Вы должны быть в порядке, чтобы написать URL-адрес с полной строкой запроса, если нет переменных   -  person Explosion Pills    schedule 12.07.2014
comment
можно попробовать "query[userid]" : 7 , fields: 'title'   -  person charlietfl    schedule 12.07.2014
comment
@ExplosionPills идентификатор пользователя является переменной ... должен ли я сначала создать строку с URL-адресом, а затем передать ее в $ http?   -  person donnikitos    schedule 12.07.2014
comment
@charlietfl уже пробовал... вообще не передает переменную.   -  person donnikitos    schedule 12.07.2014
comment
ХОРОШО. Я не знал, что это переменная. Можете ли вы изменить серверную часть, это уродливо выглядящий URL-адрес, особенно потому, что userid является переменной. В качестве альтернативы создание строки заранее также не является проблемой.   -  person charlietfl    schedule 12.07.2014
comment
Точный дубликат http://stackoverflow.com/questions/13760070/angularjs-passing-data-to-http-get-request. Решение состоит в том, чтобы использовать опцию params.   -  person Dan Dascalescu    schedule 27.10.2014
comment
Если вы столкнулись с конкретной проблемой сериализации AngularJS, тогда httpParamSerializerJQLike — это то, что вам нужно. Взгляните на stackoverflow.com /вопросы/33852190/   -  person VivekDev    schedule 24.11.2015


Ответы (1)


В запросе GET вы должны передавать параметры как часть строки запроса.

Вы можете использовать ярлык get call и передать параметры запроса в URL-адресе:

$http.get('api/item/all?userid=" + 7 + "&fields=title");

Если вам нужно получить к ним доступ как к переменным области видимости, вы также можете это сделать:

$http.get('api/item/all?userid=" + $scope.foo + "&fields=" + $scope.bar);

Также в зависимости от серверной части вы можете отправлять их как параметры пути, а не как параметр запроса:

$http.get('api/item/all/userid/" + $scope.foo + "/fields/" + $scope.bar);

надеюсь, это поможет

person arthurzp    schedule 11.07.2014
comment
Пожалуйста, не создавайте строки запроса вручную! Вам придется экранировать значения вручную. Гораздо лучше использовать параметр params объекта конфигурации. - person Dan Dascalescu; 27.10.2014
comment
Я должен решительно согласиться с Дэном Далкалеску. В настоящее время я имею дело с множеством проблем в нашем веб-приложении, потому что кто-то ранее создавал строки вручную. Зачем выбирать хрупкую методологию в качестве лучшей практики, а не использовать предоставленную вам структуру? - person JohnMetta; 14.06.2015