Отправка x-www-form-urlencoded GET запроса
Нужно, чтобы GET-параметры передавались в виде x-www-form-urlencoded
{ a: { b: 1, c: 2 }, d: [ 3, 4, { e: 5 } ] }
->
"a[b]=1&a[c]=2&d[]=3&d[]=4&d[2][e]=5"
C POST параметрам и все понятно, но GET-параметры, во-первых, не отображаются в transformRequest, во-вторых, (даже если менять их в requestInterceptor) они автоматом склеиваются из объекта параметров, т.е. собранная строка будет разбита по символам. |
Если ты используешь $resource они именно так и будут передаваться.
|
Точно? Использую ресурс. Не передаются. Преобразуются в json, как написано в документации
|
Не точно :D Забыл, что у меня все запросы как x-www-form-urlencoded отправляются)
|
Т.е. везде проставляешь этот заголовок?) В каком месте это делаешь?
|
'use strict';
// GLOBAL CONFIG
angular
.module('ng')
.config(function($httpProvider) {
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
$httpProvider.defaults.transformRequest.unshift(function(data) {
return angular.isObject(data) ? Object.toQueryString(data) : data;
});
});
|
Это для POST, а для GET?
|
$http.defaults.headers.common- для всех запросов |
Это же надо, был уверен, что у меня для всех (common) стоит, скопировал, даже не посмотрел :)
Tek, спс. Полез править в проекты =) Shitbox2, у меня такой враппер есть
/**
* Sends request to the server
* @param {Object} options
* @param {Object} data
* @returns {Promise}
* @private
*/
Server.prototype._request = function(options, data) {
var prop = options.method === 'GET' ? 'params' : 'data';
options[prop] = data;
return $http(options);
};
Т.е. когда GET, то params, POST - data https://docs.angularjs.org/api/ng/service/$http#usage |
У меня все же не работает. Проблемы две:
1) ['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8' работает только глобально, при установке $http.defaults.headers.common. А мне надо для конкретного ресурса настроить. 2) В любом случае это не работает с GET-параметрами. Даже в документации написано: Цитата:
|
Цитата:
Цитата:
|
Это не считается), т.к. далее сказано
Цитата:
C transformRequest действительно был баг, который пофиксили в новой версии https://github.com/angular/angular.j...9b303da013ac4f |
Цитата:
Сам сегодня с ним столкнулся. Пришел к выводу, что в функции
transformRequest: function(data, headers) {}
при ГЕТ запросах первого параметра быть не дожно, т.к. при ГЕТ запросах "данные" отправляются в url. Но, это не отменяет того, что оно не удобно. Лучше бы были. Пусть хотя бы отдельным параметром. Тем не менее, у себя я выкрутился :) p.s.: я гуглил transformParams и т.п. ответов не нашел. |
Я через итерсептор сделал. Не так правильно, зато работает
|
| Часовой пояс GMT +3, время: 20:17. |