Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.07.2014, 17:25
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Отправка 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) они автоматом склеиваются из объекта параметров, т.е. собранная строка будет разбита по символам.
Ответить с цитированием
  #2 (permalink)  
Старый 09.07.2014, 18:09
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Если ты используешь $resource они именно так и будут передаваться.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 09.07.2014, 19:03
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Точно? Использую ресурс. Не передаются. Преобразуются в json, как написано в документации
Ответить с цитированием
  #4 (permalink)  
Старый 09.07.2014, 19:38
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Не точно Забыл, что у меня все запросы как x-www-form-urlencoded отправляются)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #5 (permalink)  
Старый 10.07.2014, 12:24
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Т.е. везде проставляешь этот заголовок?) В каком месте это делаешь?
Ответить с цитированием
  #6 (permalink)  
Старый 10.07.2014, 15:08
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

'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;
        });
    });
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #7 (permalink)  
Старый 10.07.2014, 15:40
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Это для POST, а для GET?
Ответить с цитированием
  #8 (permalink)  
Старый 10.07.2014, 16:06
Аватар для Tek
Tek Tek вне форума
Профессор
Отправить личное сообщение для Tek Посмотреть профиль Найти все сообщения от Tek
 
Регистрация: 22.02.2012
Сообщений: 212

$http.defaults.headers.common
- для всех запросов
Ответить с цитированием
  #9 (permalink)  
Старый 10.07.2014, 20:46
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Это же надо, был уверен, что у меня для всех (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
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #10 (permalink)  
Старый 11.07.2014, 12:46
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

У меня все же не работает. Проблемы две:

1) ['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8' работает только глобально, при установке $http.defaults.headers.common. А мне надо для конкретного ресурса настроить.

2) В любом случае это не работает с GET-параметрами. Даже в документации написано:
Цитата:
params – {Object.<string|Object>} – Map of strings or objects which will be turned to ?key1=value1&key2=value2 after the url. If the value is not a string, it will be JSONified.
Но нигде не сказано, что они могут урлэнкодится...
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка запроса nodejs cyber AJAX и COMET 10 13.05.2013 20:10
Фоновая отправка запроса bugiman AJAX и COMET 1 07.11.2012 17:04
Отправка запроса псевдочеловек jQuery 3 26.01.2012 19:16
Отправка запроса с одного на другой сайт makar3000 Общие вопросы Javascript 6 21.12.2011 23:50
Отправка запроса к php сценарию по нажатию кнопки Allan Stark ExtJS 2 20.07.2011 12:16