2013-03-03 4 views
2
$ http.get()

Так у меня есть массив JSON, который выглядит примерно так:AngularJS - Как отправить многомерные данные

var myData = { 
    foo : { 
     biz : 'baz', 
     fig : 'tree' 
    } 
} 

Это может быть набрано в адресной строке как:

http://www.mysite.com/index?foo[biz]=baz&foo[fig]=tree 

И это будет работать так, как ожидалось.

Проблема заключается в том, что, когда я поставить этот myData объект AngularJS $http игровой службы как:

$http.get('http://www.mysite.com', { 
    data : myData 
}); 

Он сбегает строку запроса и не кажется, даже правильный формат, даже если бы не было esaped как это ни странно. Это выглядит примерно так:

url?foo=%7B%22biz%22%3A%22baz%22%2C%22fig%22%3A%22tree%22%7D 

Как я могу это сделать?

+1

, вероятно, лучше разместить данные ... GET имеет ограничения на длину символов – charlietfl

ответ

3

Это действительно в правильном формате. Предполагая, что ваш back-end - PHP, когда вы делаете $_GET['foo'], вы получите %7B%22biz%22%3A%22baz%22%2C%22fig%22%3A%22tree%22%7D. Странные символы, которые вы видите, - это то, что Angular - это url, кодирующий строку для вас. Это необходимо сделать перед передачей данных. Если вы введете его как foo[biz]=baz&foo[fig]=tree в свой браузер, браузер обычно автоматически перенаправляет его.

После urldecoding и json_decoding вы получите данные, которые ожидаете.

$foo = json_decode(urldecode($input), true); 

Array 
(
    [biz] => baz 
    [fig] => tree 
) 

Вы можете получить доступ к ним, как и $foo['biz']$foo['fig']

Demo

+0

работал отлично. Спасибо за быстрый ответ! –

Смежные вопросы